Mockito: Тестирование void метода, который выбрасывает исключение
У меня есть метод с типом возвращаемого значения void
, который может вызывать несколько исключений. Я хотел бы протестировать эти исключения, но все мои попытки закончились неудачей с одной и той же ошибкой:
Метод when(T) в типе Stubber не применим для аргументов (void)
Кто-нибудь подскажет, как заставить метод выбрасывать указанное исключение?
Вот мой код:
doThrow(new Exception()).when(mockedObject.methodReturningVoid(...));
2 ответ(ов)
Если вы когда-либо задумывались, как это сделать, используя новый стиль BDD в Mockito, вот пример кода:
willThrow(new Exception()).given(mockedObject).methodReturningVoid(...);
А для будущих случаев, когда вам потребуется бросить исключение, а затем ничего не делать, вы можете использовать следующий код:
willThrow(new Exception()).willDoNothing().given(mockedObject).methodReturningVoid(...);
Таким образом, вы сможете эффективно управлять ожиданиями в тестах.
Если у вас возникли трудности с тестированием метода, использующего аннотацию @Retryable
, и вам нужно выполнить три вызова метода в случае выброса исключения времени выполнения, вы можете настроить его следующим образом:
Mockito.doThrow(RuntimeException.class)
.doThrow(RuntimeException.class)
.doNothing()
.when(youMockInstance)
.methodToTest(<параметр, если ваш метод требует его>);
Таким образом, в первый и второй раз при вызове метода будет выброшено RuntimeException
, а при третьем вызове выполнение продолжится без исключений. Это решение заработало для меня.
Как замокировать методы с возвращаемым типом void с помощью Mockito
Как проверить, что в JUnit-тестах выбрасывается определенное исключение?
Можно ли перехватить несколько исключений Java в одном блоке catch?
"Как сделать так, чтобы имитируемый метод возвращал аргумент, который был ему передан?"
Как проверить, что конкретный метод не был вызван, используя Mockito?