1. ホーム
  2. java

[解決済み] MockitoでJavaのvoidメソッド呼び出しをn回検証する

2022-04-23 01:55:17

質問

私は(void)メソッドがDAOの内部で呼び出されていることを確認しようとしています - 私はその時点までの結果のリストを送信し、リストをリセットして継続するコミットポイントを使用しています。 私がリストに4つのものを持ち、私は1のコミットポイントを持っているとすると、私は"send"メソッドが4回呼び出されることを期待します。 このメソッドが1回呼び出されることを確認するには、次のように記述します。

Mockito.verify(mock).send()

は通るのですが、呼び出された回数を確認したいのです。と思うのですが

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

で十分なのですが、verifyのためのパラメータが正しくないとのことです。

ちなみに Mockito.verify(mock).send()Mockito.verify(mock.send()) または Mockito.verify((mock).send()) 同じエラーが出ます。これについてどう思いますか?

解決方法は?

必要な方法は モッキート#verify :

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

mock はモックされたオブジェクトで modeVerificationMode には、モックをどのように検証すべきかを記述します。 可能なモードは :

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回未満またはそれ以上呼ばれた場合は失敗します。


もし、そのメソッドが一度呼ばれたことがあるかどうかを調べたいだけなら VerificationMode . シンプルな

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

で十分でしょう。これは内部的に verify(mock, times(1)).someMethod("was called once"); .


同じモック上で複数の検証呼び出しを行い、"between"検証を実現することは可能です。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回と呼び出された場合、テストケースは緑色になります。