当前位置: 首页 > 知识库问答 >
问题:

Java verify void方法使用Mockito调用n次

拓拔安邦
2023-03-14

我试图验证一个(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()),我会得到相同的错误。对此有什么想法?

共有1个答案

陶宜民
2023-03-14

必要的方法是mockito#verify:

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

mock是模拟对象,modeverificationmode,它描述如何验证模拟。可能的模式有:

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

在同一个模拟上有多个验证调用以实现“介于”之间的验证是可能的。Mockito不支持类似verify(mock,between(4,6)).someMethod(“was calling 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次时,测试用例是绿色的。

 类似资料:
  • 我有一个类,它有两个方法。我想模拟这个类,然后模拟第一个方法,但不是第二个。 例如。 单元测试代码: 奇怪的是m2没有被调用。 我错过什么了吗?

  • 问题内容: 我有四个让我们说A,B,C,D的类,每个类都从另一个调用方法。 现在我已经模拟了类A,并且想模拟使用嘲笑的方法 并希望在递归方法调用上获取“ foo” 应该回来 我试过了 when(a.getB()。getC()。getD())。thenReturn(“ foo”); 但是得到了nullPointerException 然后我尝试 doReturn(“ foo”)。when(a.get

  • 我有4个类让说A,B,C,D,每一个调用的方法从另一个。 现在我已经模拟了类A,并想使用mockito模拟一个方法 但得到nullPointerException 然后我试着 doReturn(“foo”).When(A.getb().getc().getd()); 但我不能一次就做到吗?如有任何帮助,我们将不胜感激。

  • 当我从测试类调用functions方法时,我希望executeSol方法不要运行,因为它会导致错误。

  • 请有人帮助我在上面,也提供我的解决上述问题。