3
現在、レガシープロジェクトの単体テストをMockito v1からMockito v2にアップグレードしています。ユニットテストの一Mockito v1とv2の間のArgumentCaptorの相違点
、私は次のコードを持っている:OKである "確認" の両方
Listener listener = new Listener();
Alert alert = new Alert (listener);
alert.action(); // action calls 5 times the "notify" method on "listener"
ArgumentCaptor<Mess> argument = ArgumentCaptor.forClass(Mess.class);
verify(listener, times(5)).notify(argument.capture());
List<Mess> list_mess = argument.getAllValues(); // A
// The test checks list_mess and does some stuff on "alert"
alert.action(); // action calls 5 times the "notify" method on "listener"
argument = ArgumentCaptor.forClass(Mess.class);
verify(listener, times(10)).notify(argument.capture());
list_mess = argument.getAllValues(); // B
を。 mockitoのV1で
- :私はMockitoのV2で働いているのでしかし、list_messは異なる値を有する線Aで、list_messの大きさは、5つの要素であり、mockito V2との線B
- で10個の要素であります:行Aでは、list_messのサイズは5要素であり、行Bでは5要素です。最初の5要素は削除されています。コードの次の部分にサイズのリストが必要であるため、ユニットテストは失敗します。
誰かがこの動作について説明していますか?この時点で私はMockito wikiで何も見つかりませんでした。 "キャプチャ"メソッドのjavadocによると、list_messのサイズは10でなければなりません。
引数を取り込むために使用します。このメソッドは、確認の内部で使用する必要があります。
内部的には、このメソッドはArgumentMatcherの特別な実装を登録します。
この引数matcherは、後でアサーションを実行できるように引数値を格納します。
なぜ引数が5つの以上の要素をキャプチャするのでしょうか? 'Listener#notify'が実際に10回呼び出された場合、リスト内の値は、メソッドが呼び出される最初の5回、または2回目の5回、あるいは他の組み合わせですか? – Adam
リスナー#notifyが10回呼び出されます(各アラートごとに1回)# リスト内の引数は、2番目の呼び出しの5です。 しかし私はちょうどMockitoチームから答えを得ました。実際にはv2の既知のバグです – Ptiseb