Javaは、Mockitoでvoidメソッド呼び出しをn回検証します


140

DAO内で(void)メソッドが呼び出されていることを確認しようとしています。その時点までの結果のリストを送信し、リストをリセットして続行するコミットポイントを使用しています。リストに4つの項目があり、コミットポイントが1であるとします。「send」メソッドが4回呼び出されることを期待します。次のように記述することで、メソッドが1回呼び出されることを確認できます

Mockito.verify(mock).send()

合格ですが、呼び出された回数を確認したいと思います。と思う

Mockito.verify(mock.send(), times(4))

十分ですが、検証するためのパラメーターが正しくないと表示されています。

ちなみに、変更Mockito.verify(mock).send()Mockito.verify(mock.send())たりMockito.verify((mock).send())同じエラーが出たりした 場合 。これについての考え?


10
お試しくださいMockito.verify(mock, times(4)).send()send()メソッド内でメソッド呼び出しを「移動」したのはなぜでしょうかverify。あなたはすでに正しい構文を持っていました。
トム


また、あなたは何かが呼び出された回数を気にしないならば、あなたが書くことができることに注意してくださいverify(mock, atLeastOnce()).send();
ダウード・イブン・カリーム

ありがとう、そうです。私が交絡したのはMockito.verify(mock).send()合格したものでしたが、カプセル化するだけでエラーが発生し、何も変わりませんでした。しかし、それは勝利です!
nbpeth 2015年

回答:


237

必要なメソッドはMockito#verifyです:

public static <T> T verify(T mock,
                           VerificationMode mode)

mockあなたの嘲笑オブジェクトがあるとmodeされるVerificationModeモックが検証されるべき方法を説明しています。可能なモードは次のとおりです。

verify(mock, times(5)).someMethod("was called five times");
verify(mock, never()).someMethod("was never called");
verify(mock, atLeastOnce()).someMethod("was called at least once");
verify(mock, atLeast(2)).someMethod("was called at least twice");
verify(mock, atMost(3)).someMethod("was called at most 3 times");
verify(mock, atLeast(0)).someMethod("was called any number of times"); // useful with captors
verify(mock, only()).someMethod("no other method has been called on the mock");

メソッドとこれらの検証モードMockitoを使用するには、クラスからのこれらの静的インポートが必要ですverify

import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.atMost;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.only;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

したがって、あなたの場合、正しい構文は次のようになります:

Mockito.verify(mock, times(4)).send()

これにより、モックされたオブジェクトでメソッドsend4回呼び出されたことを確認できます。呼び出された回数が4回未満または4回を超えると失敗します。


確認したいだけの場合、メソッドが一度呼び出された場合は、を渡す必要はありませんVerificationMode。シンプルな

verify(mock).someMethod("was called once");

十分でしょう。内部的に使用しverify(mock, times(1)).someMethod("was called once");ます。


同じモックで複数の検証呼び出しを行い、「間」の検証を行うことができます。Mockitoはこのようなものをサポートしていませんverify(mock, between(4,6)).someMethod("was called between 4 and 6 times");が、

verify(mock, atLeast(4)).someMethod("was called at least four times ...");
verify(mock, atMost(6)).someMethod("... and not more than six times");

代わりに、同じ動作を得るために。境界が含まれているため、メソッドが4、5、または6回呼び出されたときのテストケースは緑色です。


1
VerificationModeメソッドがどこにあるかを探している人(静的インポートまたは明示的な参照用)は、にありorg.mockito.internal.verification.VerificationModeFactoryます。
スティーブチェンバーズ

verify(mock, atLeast(0)).someMethod("was called any number of times");コール検証を無視するのに役立ちました
tj-recess

2
verify(between(m,n))mとnの間の呼び出し数を確認するようなものはありますか?
nishant

2
@nishantいいえ、Mockitoはそれをサポートしていないようですが、あなたは呼び出すことができるverifyと倍にatLeast(M)し、atMost(n)同じ動作を取得します。私はそれを説明する答えを編集しました。
Tom

@KevinWelkerそうです、私はに関する情報を削除しましたVerificationModeFactory。最新バージョンでも引き続き使用できますが、内部クラスを使用しないでください。
Tom
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.