Используя Mockito, как мне перехватить объект обратного вызова в пустом методе? - PullRequest
28 голосов
/ 27 августа 2010

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

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

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

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

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

1 Ответ

35 голосов
/ 27 августа 2010

Для функций, возвращающих 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[]!

...