在调用未存根的方法时引发运行时异常

2022-09-01 01:35:45

我正在使用Mockito。我想在调用未存根方法时抛出一个。RuntimeException

有什么办法可以做到这一点吗?


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

}

请注意,您不能使用此功能,因为该方法之前被调用(当()调用时,mockito如何工作?),并且在模拟进入存根模式之前,它将抛出一个。whenwhenRuntimeException

因此,您必须使用它才能正常工作。doReturn


答案 2

执行此操作的最佳方法是使用 和 静态方法。在测试的“行为”部分之后调用这些;如果调用了任何未存根的方法但未验证,您将失败。verifyNoMoreInteractionsignoreStubs

verifyNoMoreInteractions(ignoreStubs(myMock));

这在 https://static.javadoc.io/org.mockito/mockito-core/2.8.47/org/mockito/Mockito.html#ignore_stubs_verification 中进行了描述,尽管我相信那里的代码示例当前包含印刷错误。


推荐