6

Mockito: Тестирование void метода, который выбрасывает исключение

1

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

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

Кто-нибудь подскажет, как заставить метод выбрасывать указанное исключение?

Вот мой код:

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

2 ответ(ов)

0

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

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

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

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

Таким образом, вы сможете эффективно управлять ожиданиями в тестах.

0

Если у вас возникли трудности с тестированием метода, использующего аннотацию @Retryable, и вам нужно выполнить три вызова метода в случае выброса исключения времени выполнения, вы можете настроить его следующим образом:

Mockito.doThrow(RuntimeException.class)
       .doThrow(RuntimeException.class)
       .doNothing()
       .when(youMockInstance)
       .methodToTest(<параметр, если ваш метод требует его>);

Таким образом, в первый и второй раз при вызове метода будет выброшено RuntimeException, а при третьем вызове выполнение продолжится без исключений. Это решение заработало для меня.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь