Тест Mockito пустым методом вызывает исключение

399

У меня есть метод с voidтипом возврата. Он также может генерировать несколько исключений, поэтому я хотел бы проверить, какие исключения были выброшены. Все попытки потерпели неудачу по одной и той же причине:

Метод when (T) в типе Stubber не применим для аргументов (void)

Любые идеи, как я могу получить метод, чтобы бросить указанное исключение?

doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
edwardmlyte
источник
1
Возможный дубликат Как сделать mock to void методами с mockito
Виллиан

Ответы:

706

Скобки плохо размещены. Вы должны использовать

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

и не

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

Это объясняется в документации

Дж. Б. Низет
источник
7
@edwardmlyte Это несоответствие Mockito является одной из причин , почему я переключитесь на MoxieMocks
Muel
@clement можно использовать оба: docs.mockito.googlecode.com/hg/latest/org/mockito/… . Создание исключения не выбрасывает его.
Дж. Б. Низет
1
@JB Nizet Я полностью согласен с вами, но, тем не менее, если я пишу doThrow (new Exception ()) вместо doThrow (Exception.class), у меня возникает следующая ошибка при запуске теста; Ожидаемое исключение com.company.project.exception.ElementNotFoundException, но получило исключение org.mockito.exceptions.base.MockitoException:
clement
2
Задайте другой вопрос, с тестируемым кодом, кодом теста и полной трассировкой стека исключения.
JB Низет
6
doThrow (new Exception ()). when (объект) .voidMethod (any ());
Soumyajit Swain
14

Если вы когда-нибудь задумывались, как это сделать, используя новый стиль BDD Mockito:

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

И для дальнейшего использования может потребоваться выбросить исключение, а затем ничего не делать:

willThrow(new Exception()).willNothing().given(mockedObject).methodReturningVoid(...));
Ондрей Буркерт
источник
1
Спасибо за размещение этого здесь; если метод возвращает значение: дали (mockedObject.methodReturningAnObject ()). willThrow (new Exception ()); если метод ничего не возвращает: willThrow (new Exception ()). Given (mockedObject) .methodReturningVoid (...)); Объяснение формы javadoc: «Для устранения пустот требуется иной подход, чем {@link Mockito # when (Object)} (или BDDMockito.given), поскольку компилятору не нравятся
пустые