Используя Mockito, как мне перехватить объект обратного вызова в методе void?

Я использую mockito для тестирования устаревшего модуля входа JAAS/LDAP.

Интерфейс javax.security.auth.callback.CallbackHandler определяет функцию:

void handle(javax.security.auth.callback.Callback[] callbacks)

Я ожидаю, что callbacks будет содержать NameCallback, который является объектом, которым нужно манипулировать, чтобы пройти тест.

Есть ли способ эффективно издеваться над этим, или мне лучше использовать заглушенную реализацию CallbackHandler?


person brasskazoo    schedule 27.08.2010    source источник


Ответы (1)


Для функций, возвращающих void, используйте doAnswer()

doAnswer(...).when(mockedObject).handle(any(Callback[].class));

И Answer, который выполняет перехват, должен быть параметром doAnswer, например. как анонимный класс:

new Answer() {
  public Object answer(InvocationOnMock invocation) {
      Object[] args = invocation.getArguments();
      Mock mock = invocation.getMock();
      return null;
  }}

В этом случае args будет массивом Callback[]!

person brasskazoo    schedule 27.08.2010
comment
Примечание для всех, кто переходит сразу к ответам: метод handle() следует заменить любым методом, который вы используете в своем классе. Я был немного сбит с толку, потому что использовал handle(), думая, что это функция Mockito. - person Paul Wintz; 23.03.2018