web-dev-qa-db-ja.com

JavaがMockitoでvoidメソッド呼び出しをn回検証する

私は(void)メソッドがDAOの中で呼び出されていることを確認しようとしています - 私はその時点まで結果のリストを送り、リストをリセットしそして続けるコミットポイントを使っています。リストに4つのものがあり、コミットポイントが1であるとすると、 "send"メソッドは4回呼び出されることになります。次のように書くことでメソッドが一度だけ呼び出されることを確認できます

Mockito.verify(mock).send()

それは合格します..しかし、私はそれが呼び出された回数を確認したいです。私はそれを考えるだろう

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

十分でしょうが、それは検証にはパラメータが正しくないと言っています。

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

111
nbpeth

必要な方法は 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()

これは、メソッドsendがモックオブジェクトで4回呼び出されたことを確認します。 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回呼び出されたときのテストケースは緑色です。

190
Tom