Ответ 1
Вы можете установить ответ по умолчанию для макета. Все методы, которые не были обрезаны, будут использовать этот ответ по умолчанию.
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
.