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(...));
edwardmlyte
źródło

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

JB Nizet
źródło
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(...));
Ondrej Burkert
źródło
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,