Mockito 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)
потому что это возвращает null:
verify(userService, atLeastOnce()).getUserById(anyLong())
Это кажется озадачивающим. Если я использую значение по умолчанию (только один вызов), он терпит неудачу, потому что он вызывается несколько раз, но если я скажу, что множественные вызовы в порядке, он терпит неудачу, потому что он не может найти никаких вызовов!
Может ли кто-нибудь помочь с этим?
Ответы
Ответ 1
Похоже, вы оба хотите насмехаться над тем, что происходит, когда вызывается 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);