我正在使用Mockito对我的班级进行测试。该测试验证是否调用了一个名为postMessage(destination,messageString)的方法。
我的测试旨在验证,根据消息内容,postMessage()被调用一次或零次。
我遇到的问题是,在我的课堂上,我有2次调用postMessage()。 2个呼叫之间的区别是目的地 - 呼叫将消息发送到2个不同的目的地。
e.g。
1. postMessage(destination-1, message)
2. postMessage(destination-2, message)
当我拨打1次验证时,就像这样
//actually called twice because of destination-1 and destination-2
verify(sender, times(1)).postMessage(Mockito.<javax.jms.Destination>.any(), Mockito.<String>.any());
实际数字是2.我知道数字2是正确的,因为它被调用了两次,但是我想在仅使用destination-2调用的方法上隔离测试。
另外,当我想验证postMessage()被调用零次(消息未被发送)时,我的测试将会正确声明postMessage()被调用一次 - 这是因为它实际上是为destination-1调用的
//actually called once because of destination-1
verify(sender, times(0)).postMessage(Mockito.<javax.jms.Destination>.any(), Mockito.<String>.any());
所以我的问题是 - 如何隔离我的测试以准确测试我想要的内容而不是我第一次调用postMessage()的行为?
答案 0 :(得分:0)
根据@ Tom的建议: 如果你不想匹配任何目的地,你为什么要使用Mockito ..any()?使用eq(destXYZ)代替&#34; destXYZ&#34;是你的目的地。
更换:
//actually called twice because of destination-1 and destination-2
verify(sender, times(1)).postMessage(Mockito.<Destination>.any(), Mockito.<String>.any());
带
Destination myDest = mock(Destination.class);
//actually called twice because of destination-1 and destination-2
verify(sender, times(1)).postMessage(myDest, Mockito.<String>.any());
worked.
通过了我的测试。