同じメソッドを何度も呼び出すときに ArgumentCaptor が引数を記録できないという問題があります。基本的にこれはうまくいかないようです:
List<Dummy> mList = mock(List.class);
Dummy dummy = new Dummy();
when(mList.get(anyInt())).thenReturn(dummy);
Dummy d = mList.get(12);
d.setName("John");
mList.add(d);
Dummy g = mList.get(10);
g.setName("Ben");
mList.add(g);
...
verify(mymock, times(3)).doStuff(captor.capture));
assertEquals("John", captor.getAllValues().get(0).getName());
assertEquals("Ben", captor.getAllValues().get(1).getName());
assertEquals("Don", captor.getAllValues().get(2).getName());
getName() の値は常に「Don」に設定されます。InOrder も使用してみましたが、同じ結果が得られました。
機能 (そして私はばか) またはバグ?
問題をよりよく説明するために、ユース ケースを作成しました: http://pastebin.com/RE1UzJ4F
乾杯