1. ホーム
  2. java

[解決済み] ArgumentCaptorを使用してスタブする方法は?

2022-05-04 20:43:54

質問

Mockitoの場合 ドキュメンテーション ジャバドック と書いてあります。

<ブロッククオート

ArgumentCaptorは検証で使用することを推奨しますが、スタブでは使用しないことを推奨します。

しかし、ArgumentCaptorがどのようにスタビングに使用されるのかが理解できません。どなたか上記の文章を説明し、ArgumentCaptorがどのようにスタブに使用できるかを示すか、またはそれができる方法を示すリンクを提供していただけませんか?

どのように解決するのですか?

以下の方法を想定してテストしてください。

public boolean doSomething(SomeClass arg);

Mockitoのドキュメントでは、以下のように書かれています。 ではなく は、このようにキャプチャを使用します。

when(someObject.doSomething(argumentCaptor.capture())).thenReturn(true);
assertThat(argumentCaptor.getValue(), equalTo(expected));

なぜなら、スタブ時にマッチャーを使用すれば良いからです。

when(someObject.doSomething(eq(expected))).thenReturn(true);

しかし、検証は別の話です。もしあなたのテストが、このメソッドが特定の引数で呼ばれたことを確認する必要がある場合は ArgumentCaptor であり、このようなケースを想定して設計されています。

ArgumentCaptor<SomeClass> argumentCaptor = ArgumentCaptor.forClass(SomeClass.class);
verify(someObject).doSomething(argumentCaptor.capture());
assertThat(argumentCaptor.getValue(), equalTo(expected));