2016-12-14 13 views
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は、後でアサーションを実行できるように引数値を格納します。

+0

なぜ引数が5つの以上の要素をキャプチャするのでしょうか? 'Listener#notify'が実際に10回呼び出された場合、リスト内の値は、メソッドが呼び出される最初の5回、または2回目の5回、あるいは他の組み合わせですか? – Adam

+0

リスナー#notifyが10回呼び出されます(各アラートごとに1回)# リスト内の引数は、2番目の呼び出しの5です。 しかし私はちょうどMockitoチームから答えを得ました。実際にはv2の既知のバグです – Ptiseb

答えて

関連する問題