メソッドの呼び出し回数 (時間のパラメーター) を正しく予測するのに問題があります。では、mockito はどのようにメソッド呼び出しをカウントしていますか。メソッドが呼び出される場所にブレークポイントを設定し、このポイントでカウントを停止すると、他のカウントが得られます!
それで、カウントはパラメーターにどの程度依存していますか、それともパラメーターに依存していませんか? これは私を混乱させる例です(初めてではありません):
verify(view).setBoxes(eq(attribute), eq(State.some), checkBoxes.capture());
assertThat(checkBoxes.getValue(), allOf(hasEntry(value1, true), hasEntry(value2, false), hasEntry(value3, false)));
//doing some stuff to provoke 2nd call
verify(view, times(2)).setBoxes(eq(attribute), eq(State.some), checkBoxes.capture());
assertThat(checkBoxes.getValue(), allOf(hasEntry(value1, true), hasEntry(value2, true), hasEntry(value3, false)));
//doing some stuff to provoke 3rd call - with times(3) it fails
verify(view, times(2)).setBoxes(eq(attribute), eq(State.some), checkBoxes.capture());
assertThat(checkBoxes.getValue(), allOf(hasEntry(value1, true), hasEntry(value2, true), hasEntry(value3, true)));
上記のテストはパスします。ご覧のとおり、キャプチャされた値は毎回変化します。デバッガーごとに、上記でチェックしたパラメーターを使用して 3 つの呼び出しを明確に証明できます。ビュー オブジェクトの ID/ハッシュも確認しました。これはテスト シングルトンであり、すべての呼び出しが同じインスタンスに送られます。
しかし、なぜそれが失敗しているのtimes(3)
ですか?(デバッガーで) 再現不可能なメソッド呼び出し数に出くわしたのはこれが初めてではありません。メソッド呼び出しカウントのロジックを誤解しているだけだといいのですが、そうですか?