Я использую Мокито. Я хочу добавить RuntimeException
, когда вызывается метод без метки.
Есть какой-либо способ сделать это?
Я использую Мокито. Я хочу добавить RuntimeException
, когда вызывается метод без метки.
Есть какой-либо способ сделать это?
Вы можете установить ответ по умолчанию для макета. Все методы, которые не были обрезаны, будут использовать этот ответ по умолчанию.
public void testUnstubbedException() {
// Create a mock with all methods throwing a RuntimeException by default
SomeClass someClass = mock( SomeClass .class, new RuntimeExceptionAnswer() );
doReturn(1).when(someClass).getId(); // Must use doReturn
int id = someClass.getId(); // Will return 1
someClass.unstubbedMethod(); // Will throw RuntimeException
}
public static class RuntimeExceptionAnswer implements Answer<Object> {
public Object answer( InvocationOnMock invocation ) throws Throwable {
throw new RuntimeException ( invocation.getMethod().getName() + " is not stubbed" );
}
}
Обратите внимание, что вы не можете использовать when
с этой функциональностью, так как метод вызывается до when
(Как работает mockito при() вызове?), и он будет бросать RuntimeException
, прежде чем макет переходит в режим stubbing.
Поэтому для этого нужно использовать doReturn
.
Лучший способ сделать это - статические методы verifyNoMoreInteractions
и ignoreStubs
. Назовите их после "действия" части вашего теста; и вы получите отказ, если какие-либо нераскрытые методы были вызваны, но не проверены.
verifyNoMoreInteractions(ignoreStubs(myMock));
Это описано в https://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#ignore_stubs_verification, хотя я считаю, что пример кода в настоящее время содержит опечатку.
Вы издеваетесь над целым классом, и результат заключается в том, что все методы вернут null.
Затем вы можете использовать doReturn(...)
, чтобы изменить это поведение. Точно так же вы можете использовать doThrow(...)
, чтобы (как я помню только void
) методы генерировали исключения.
Отвечает ли это на ваш вопрос?