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

时间:2015-01-05 20:37:05

标签: java unit-testing junit mockito verify

我试图验证在DAO中调用(void)方法 - 我使用提交点发送结果列表直到该点,重置列表并继续。  假设我在列表中有4个东西,我的提交点为1,我希望"发送"方法被调用4次。  我可以通过编写

来验证该方法是否被调用一次

Mockito.verify(mock).send()

它通过..但我想验证它被调用的次数。我想是

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

就足够了,但它说参数不正确验证。

顺便说一下,如果我将Mockito.verify(mock).send()更改为Mockito.verify(mock.send())Mockito.verify((mock).send()),我会收到同样的错误。对此的想法?

1 个答案:

答案 0 :(得分:188)

必要的方法是Mockito#verify

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

mock是您的模拟对象,modeVerificationMode,用于描述如何验证模拟。 Possible modes are

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");

您需要Mockito课程中的这些静态导入才能使用verify方法和这些验证模式:

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 次。如果被调用的次数少于或少于4次,则会失败。


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

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

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


可以在同一个模拟器上进行多次验证调用,以实现&#34;之间的#34;验证。 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次时,测试用例为绿色。