2017-02-14 15 views
1

メソッドに渡されたパラメータをチェックしたいが、このメソッドが呼び出される3回目にチェックが行われなければならない。Mockitoベリファイはいくつかのコールをスキップしますか?

私は答えは行くことかもしれないと思った:

verify(myMock, times(2)).myMethod(any()); 
verify(myMock).myMethod(paramIWant); 

...しかし、それは最初の行に失敗します。

しかし5倍でした。望ましくない呼び出し:。

...私が興味1の後に2つの以上のコールが実際に存在するため

+0

ありがとうございます。私は少し前にArgumentCaptorを使用しました。私はそれを行うためのすてきな方法があるかもしれないことを望んでいた! –

+0

私はあなたが私の答えよりもうっとうしいものを見つけることはないと思う。あなたがそうする気があれば、注釈を使ってキャプチャを作成することはもちろん可能です。 –

+0

「しかし、5回だった」 1回目の検証で使用される 'any()' Matcherが貪欲で、すべてのメソッド呼び出しに一致するためです。他のマッチャーとの他の確認呼び出しがあることは知られていません。 –

答えて

1

は、このために、引数キャプターを使用してください。あなたが確認したら、キャプチャーを渡して、このメソッドにパラメーターとして渡されたすべての値を取り出し、必要なものをチェックすることができます。

ArgumentCaptor<SomeClass> myCaptor = ArgumentCaptor.forClass(SomeClass.class); 
verify(myMock,times(5)).myMethod(myCaptor.capture()); 

List<SomeClass> paramsPassed = myCaptor.getAllValues(); 
assertEquals(paramIWant, paramsPassed.get(2)); 
+0

ありがとうございました。非常にうまく、素晴らしい。 Mockitoのnewbとして、私の活動の大半は1つのクラス、Mockitoの使用に限定されています。しかし、他にも何百ものクラスがあり、それらが何をするのか不思議に思うことがあります。たとえば、 'VerificationMode'(すなわち' verify'の2番目のパラメタ)を実装するクラスです。すべてが時間の経過とともに明らかになります。間違いなく、 –

+0

PS私は***あなたがここにsthgを見逃していると思うので、私は編集を試みるだろう...私は間違って、謝罪している場合。 –

+0

ああ、感謝してくれてありがとう。私はいつもその部分を忘れています。 –

関連する問題