Throw a RuntimeException when invoking an unstubbed method

java, mockito

Solution

You can set a default answer for a mock. All methods that aren't stubbed will use this default answer.

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" );
    }

}

Note that you cannot use `when` with this functionality, since the method is called before `when` (How does mockito when() invocation work?) and it will throw a `RuntimeException` before the mock goes into stubbing mode.

Therefore, you must use `doReturn` for this to work.

Problem

I'm using Mockito. I want to throw a `RuntimeException` when an unstubbed method is called. Is there any way to do this?

Original source

Related problems