Метод Mockito test void метод викидає виняток


399

У мене є метод із voidтипом повернення. Він також може нанести ряд винятків, тому я хотів би перевірити ті винятки, які викидаються. Усі спроби провалилися з тієї ж причини:

Метод, коли (T) у типі Stubber не застосовується для аргументів (недійсних)

Будь-які ідеї, як я можу отримати метод кинути вказаний виняток?

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/… . Створення винятку не кидає його.
JB Nizet

1
@JB Nizet Я повністю погоджуюся з вами, але, якщо я напишу doThrow (новий виняток ()) замість doThrow (Exception.class), у мене є наступна помилка, коли я запускаю тест; Очікуваний виняток com.company.project.exception.ElementNotFoundException, але отримав org.mockito.exceptions.base.MockitoException:
Климент

2
Задайте інше запитання: з тестовим кодом, кодом тесту та повним слідом стека винятку.
JB Nizet

6
doThrow (новий виняток ()). коли (об'єкт) .voidMethod (будь-який ());
Soumyajit Swain

14

Якщо ви коли-небудь замислювалися, як це зробити, використовуючи новий стиль BDD Mockito:

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

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

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

1
Дякуємо, що опублікували це тут; якщо метод повертає значення: заданий (mockedObject.methodReturningAnObject ()). willThrow (новий виняток ()); якщо метод нічого не повертає: willThrow (новий виняток ()), заданий (mockedObject) .methodReturningVoid (...)); Пояснення форми javadoc: "Заглушення порожнеч вимагає іншого підходу від {@link Mockito # коли (Об'єкт)} (або BDDMockito.given), оскільки компілятор не любить недійсних методів всередині дужок ..."
Wolf359
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.