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


399

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

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

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

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

Ответы:


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), поскольку компилятору не нравятся
пустые
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.