Mockito声称方法调用了两次

时间:2015-10-16 10:12:45

标签: java mockito

我正在使用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()的行为?

1 个答案:

答案 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.

通过了我的测试。