Java 使用 Mockito 验证 void 方法调用 n 次
Java verify void method calls n times with Mockito
我正在尝试验证是否在 DAO 内部调用了一个 (void) 方法 - 我正在使用一个提交点,该提交点发送到该点为止的结果列表,重置列表并继续。
假设我在列表中有 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())
,我会得到同样的错误。对此有何想法?
必要的方法是Mockito#verify:
public static <T> T verify(T mock,
VerificationMode mode)
mock
是您的模拟对象,mode
是描述应如何验证模拟的 VerificationMode
。 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
class 中进行这些静态导入,以便使用 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");
.
可以对同一个 mock 进行多次验证调用以实现 "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 次时,测试用例为绿色。
我正在尝试验证是否在 DAO 内部调用了一个 (void) 方法 - 我正在使用一个提交点,该提交点发送到该点为止的结果列表,重置列表并继续。 假设我在列表中有 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())
,我会得到同样的错误。对此有何想法?
必要的方法是Mockito#verify:
public static <T> T verify(T mock,
VerificationMode mode)
mock
是您的模拟对象,mode
是描述应如何验证模拟的 VerificationMode
。 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
class 中进行这些静态导入,以便使用 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");
.
可以对同一个 mock 进行多次验证调用以实现 "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 次时,测试用例为绿色。