我在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
?在这种情况下,您似乎正在测试特定的组件,但是模拟将期望放在模拟上。那没有道理。