Java 使用 Mockito 验证 void 方法调用 n 次

我试图验证一个(void)方法是否在 DAO 内部被调用-我使用一个提交点来发送到该点的结果列表,重置列表并继续。 假设列表中有4个元素,提交点为1,我希望“ send”方法被调用4次。 我可以通过写来验证该方法被调用一次

Mockito.verify(mock).send()

它通过了. . 但我想核实它被调用的次数。我会认为

Mockito.verify(mock.send(), times(4))

是足够的,但它说,参数是不正确的验证。

顺便说一下,如果我把 Mockito.verify(mock).send()改成 Mockito.verify(mock.send())或者 Mockito.verify((mock).send()),我也会得到同样的错误?

273142 次浏览

必要的方法是 Mockito # 确认:

public static <T> T verify(T mock,
VerificationMode mode)

mock是模拟对象,mode是描述如何验证模拟的 VerificationMode:

verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
verify(mock, only()).someMethod("no other method has been called on the mock");

为了使用 verify方法和这些验证模式,需要从 Mockito类中进行这些静态导入:

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

所以在你的例子中,正确的语法应该是:

Mockito.verify(mock, times(4)).send()

这将验证方法 send在模拟对象上被调用了多次。如果调用次数少于或多于4次,它将失败。


如果您只是想检查,如果方法已经被调用过一次,那么就不需要传递 VerificationMode。很简单

verify(mock).someMethod("was called once");

就足够了,它内部使用 verify(mock, times(1)).someMethod("was called once");


可以在同一模拟上进行多个验证调用,以实现“ between”验证。Mockito 不支持这样的 verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");,但我们可以编写

verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");

相反,得到同样的行为。边界是 包括,因此当方法被调用4次、5次或6次时,测试用例是绿色的。