确保在mockito中不调用非模拟方法

use*_*342 7 java unit-testing mockito

在以下示例中:

   Execution execution = mock(Execution.class);
   when(execution.getLastQty()).thenReturn(1000.0);
   when(execution.getLastPrice()).thenReturn(75.0);

   order.onFillReceived(execution);

   assertEquals(0, order.getLeavesQty(), 0);
Run Code Online (Sandbox Code Playgroud)

执行还有许多其他不应该被调用的方法.在此测试中只应使用已经模拟的两种方法,并且应该调用它们.如果调用任何其他方法,则测试应该失败.

如果调用任何其他方法,如何告诉Mockito失败?

Jon*_*eet 8

文档明确涵盖了这一点.您想verifyNoMoreInteractions在致电verify(根据文档)或之后致电

verify(execution).getLastQty();
verify(execution).getLastPrice();
verifyNoMoreInteractions(execution);
Run Code Online (Sandbox Code Playgroud)

或使用ignoreStubs:

verifyNoMoreInteractions(ignoreStubs(execution));
Run Code Online (Sandbox Code Playgroud)

  • 如果你想根据@ JonSkeet的回答使用`verifyNoMoreInteractions`而不使用`ignoreStubs`,你必须实际上把`verify`调用放入你期望的方法调用中(大概是`getLastQty`和`getLastPrice` ).否则,如果调用了这些方法,测试将失败.但是,我还不够勇敢地向SOV皇室投票!:-) (4认同)