![](/img/trans.png)
[英]Cannot use mocked function calls in parameters of verify: too many invocations
[英]Mockito verify() fails with "too many actual invocations"
我有一个相当复杂的测试用例,我正在尝试将以下 verify() 添加到:
verify(userService).getUserById(anyLong()).setPasswordChangeRequired(eq(Boolean.TRUE));
这失败并出现此错误:
org.mockito.exceptions.verification.TooManyActualInvocations:
userService.getUserById(<any>);
Wanted 1 time:
-> at test.controllers.AuthenticationControllerMockTest.testLookupsExceeded(AuthenticationControllerMockTest.java:404)
But was 4 times. Undesired invocation:
所以我把它改成了这样:
verify(userService, atLeastOnce()).getUserById(anyLong()).setPasswordChangeRequired(eq(Boolean.TRUE));
现在它失败了:
java.lang.NullPointerException
at test.controllers.AuthenticationControllerMockTest.testLookupsExceeded(AuthenticationControllerMockTest.java:404)
因为这是返回空值:
verify(userService, atLeastOnce()).getUserById(anyLong())
这似乎令人费解 - 如果我使用默认值(仅一次调用),它会失败,因为它被多次调用,但如果我告诉它多次调用是可以的,它会失败,因为它找不到任何调用!
有人能帮忙吗?
看起来你们俩都想模拟调用userService.getUserById()
时发生的情况,并验证setPasswordChangeRequired(true)
在该返回的对象上被调用。
您可以通过以下方式完成此操作:
UserService userService = mock(UserService.class);
User user = mock(User.class);
when(userService.getUserById(anyLong())).thenReturn(user);
...
// invoke the method being tested
...
verify(user).setPasswordChangeRequired(true);
间歇性地得到同样的错误。 我们发现我们错误地在类中添加了两个相同类型的@Mock
。
@Mock
SomeClient aClient;
@Mock
SomeClient bClient;
@Test
void test(){
verify(aClient).someMethod(any()); //passes and fails intermittently
}
删除第二个模拟修复了片状。
添加调用该方法的次数也应该可以解决该问题。
验证(客户端,次(2))。someMethod();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.