web-dev-qa-db-ja.com

Mockitoを使用して、voidメソッドでコールバックオブジェクトをインターセプトするにはどうすればよいですか?

Mockitoを使用して、レガシーJAAS/LDAPログインモジュールをテストしています。

javax.security.auth.callback.CallbackHandlerインターフェースは関数を定義します:

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

callbacksにはNameCallbackが含まれていると思います。これは、テストに合格するために操作する必要があるオブジェクトです。

これを効果的にモックする方法はありますか、それともCallbackHandlerのスタブ実装を使用したほうがよいでしょうか?

30
brasskazoo

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[]になります!

35
brasskazoo