質問: mock(モック化したいクラス.class); @Before public void setUp() { // モックを有効にする MockitoAnnotations.initMocks(this); } @Test public void テスト() { // 戻り値のテストはOK assertThat(test, is(service.テスト対象のメソッド())); // モックを呼び出した時に、 // 試験対象のマップの検証はどうすればよいでしょうか。 // verify()? // argumentcaptor? } } ``` 上記処理の通り、途中でセッションにつめた変数の内容を検証したいのですが、 何かいい方法はないでしょうか。 皆様のお知恵をお借りできれば幸いです。 よろしくお願い致します。
回答: `モック化したいクラス#getMap()`メソッドで返されるインスタンスを検証できるように、自前で用意した(=テストコード側で用意した)インスタンスを返すようにすれば良いです。 Mockitoでは次のように書けます(ドキュメント)。 ``` when(モックインスタンス.getMap()).thenReturn(map); ``` テストコード全体としては、次のようになります: ``` public class テスト対象のクラスTest { @Inject @InjectMocks テスト対象のクラス service; @Mock private モック化したいクラス モックインスタンス; private Map map; @Before public void setUp() { MockitoAnnotations.initMocks(this); map = new HashMap(); when(モックインスタンス.getMap()).thenReturn(map); } @Test public void テスト() { assertThat(true, is(service.テスト対象のメソッド())); assertEquals(1, map.keySet().size()); assertEquals("テストKey", map.keySet().iterator().next()); assertEquals("テストValue", map.values().iterator().next()); } } ```