Java使用Mockito验证void方法调用n次
我试图验证是否在DAO内部调用了(void)方法——我使用的是一个提交点,它将结果列表发送到该点,重置列表并继续。 假设列表中有4件事情,并且提交点为1,我希望“send”方法被调用4次。 我可以通过编写Java使用Mockito验证void方法调用n次,java,unit-testing,junit,mockito,verify,Java,Unit Testing,Junit,Mockito,Verify,我试图验证是否在DAO内部调用了(void)方法——我使用的是一个提交点,它将结果列表发送到该点,重置列表并继续。 假设列表中有4件事情,并且提交点为1,我希望“send”方法被调用4次。 我可以通过编写 Mockito.verify(mock.send() 它过去了。。但我想确认它被调用的次数。我认为 Mockito.verify(mock.send(),times(4)) 这就足够了,但它说参数不适合验证 顺便说一下,如果我将Mockito.verify(mock).send()更改为Moc
Mockito.verify(mock.send()
它过去了。。但我想确认它被调用的次数。我认为
Mockito.verify(mock.send(),times(4))
这就足够了,但它说参数不适合验证
顺便说一下,如果我将Mockito.verify(mock).send()
更改为Mockito.verify(mock.send())
或Mockito.verify((mock.send())
,我会得到相同的错误。对此的想法?必要的方法是:
为了使用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(“被调用一次”)代码>
可以在同一模拟上进行多个验证调用,以实现“中间”验证。Mockito不支持这样的东西verify(mock,介于(4,6)之间)代码>,但我们可以编写
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次时,测试用例是绿色的。Try。我想知道为什么您将send()
方法调用“移动”到verify
方法中。您已经有了正确的语法。还要注意,如果您不关心某个东西被调用了多少次,那么您可以编写verify(mock,atleastone()).send()代码>谢谢,没错。我发现令人困惑的是,Mockito.verify(mock).send()
传递了,但仅仅封装它就导致了一个错误,而这个错误不会改变任何东西。然而,这是一场胜利!对于希望找到VerificationMode
方法的位置(用于静态导入或显式引用)的任何人,它们位于org.mockito.internal.verification.VerificationModelFactory
verification(mock,至少(0)).someMethod(“被调用了任意次数”)
有助于忽略调用验证有类似于验证(在(m,n)之间)的东西
可以验证m和n之间的调用数?@nishant不,Mockito似乎不支持这一点,但您可以调用验证
到至少(m)
和atMost(n)
的时间来获得相同的行为。我已经编辑了答案,并解释了这一点。@KevinWelker你是对的,我已经删除了有关VerificationModelFactory
的信息。它在最新版本中仍然可用,但我同意不应该使用内部类。
verify(mock).someMethod("was called once");
verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");