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