我在jUnit4中进行了测试:

@Mock
MyWebClient myWebClientMock;

@Test
public void testOnOpen() throws Exception {
    System.out.println("OnOpen");
    Session session = null;
    MyWebClient instance = new MyWebClient();
    instance.connectToWebSocket();

    instance.OnOpen(instance.getSession());
    Mockito.verify(myWebClientMock).sendPing();
}


在代码的最后一行,我检查是否调用了方法sendPing()
我很确定此方法是在OnOpen()方法内部调用的:

@OnOpen
@Override
public void OnOpen(Session session) throws IOException {
    this.session = session;
    sendPing();
}


当我进行调试时,我发现它确实已被调用。但是为什么Mockito.verify(myWebClientMock).sendPing()不通过?

最佳答案

因为您没有在模拟中调用sendPing,所以您在instance引用的对象上调用了它。

您要测试MyWebClient吗?还是正在测试使用MyWebClient的其他组件,因此必须模拟MyWebClient?在这种情况下,您似乎正在测试特定的组件,但是模拟将期望放在模拟上。那没有道理。

07-24 15:57