Test Mockito metoda void zgłasza wyjątek


399

Mam metodę z voidtypem zwrotu. Może również generować wiele wyjątków, dlatego chciałbym przetestować zgłoszone wyjątki. Wszystkie próby zakończyły się niepowodzeniem z tego samego powodu:

Metoda, w której (T) w typie Stubber nie ma zastosowania do argumentów (void)

Wszelkie pomysły, w jaki sposób mogę uzyskać metodę zgłaszania określonego wyjątku?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));

Odpowiedzi:


706

Nawiasy są źle umieszczone. Musisz użyć

doThrow(new Exception()).when(mockedObject).methodReturningVoid(...);
                                          ^

i nie

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
                                                                   ^

Jest to wyjaśnione w dokumentacji


7
@edwardmlyte Ta niespójność Mockito jest jednym z powodów, dla których przestawiłem się na MoxieMocks
Muel

@clement oba mogą być używane: docs.mockito.googlecode.com/hg/latest/org/mockito/… . Utworzenie wyjątku go nie wyrzuca.
JB Nizet,

1
@JB Nizet Całkowicie się z tobą zgadzam, ale jeśli jednak napiszę doThrow (nowy wyjątek ()) zamiast doThrow (wyjątek.klasa), po uruchomieniu testu pojawia się następujący błąd; Oczekiwano wyjątku com.company.project.exception.ElementNotFoundException, ale otrzymano org.mockito.exceptions.base.MockitoException:
clement

2
Zadaj kolejne pytanie, testując kod, kod testu i kompletny ślad stosu wyjątku.
JB Nizet

6
doThrow (new Exception ()). when (object) .voidMethod (any ());
Soumyajit Swain,

14

Jeśli kiedykolwiek zastanawiałeś się, jak to zrobić za pomocą nowego stylu BDD Mockito:

willThrow(new Exception()).given(mockedObject).methodReturningVoid(...));

I do przyszłego odniesienia może być konieczne zgłoszenie wyjątku, a następnie nic nie robienie:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));

1
Dzięki za opublikowanie tego tutaj; jeśli metoda zwraca wartość: podany (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); jeśli metoda nic nie zwraca: willThrow (new Exception ()). given (mockedObject) .methodReturningVoid (...)); Wyjaśnienie z javadoc: „Stubbing pustych przestrzeni wymaga innego podejścia niż {@link Mockito # when (Object)} (lub BDDMockito.given), ponieważ kompilator nie lubi pustych metod w nawiasach ...”
Wolf359,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.