Mockitoを使用して、パラメータの任意の組み合わせで、モックされたメソッドがまったく呼び出されなかったことを確認するにはどうすればよいですか?
例えば、私はオブジェクトを持っています-myObject
-それは2番目の、モックされたオブジェクトを使用しています-myMockedOtherObject
-メソッドを持っています-someMethodOrOther(String parameter1, String parameter2)
。
myObject.myMethod()
を呼び出して、someMethodOrOther()
does n'tが呼び出されることを確認します。-anyの組み合わせで。
例えば。:
_myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther();
_
someMethodOrOther()
には特定のパラメーターを指定する必要があるため、できません。
Mockitoの引数マッチャーを使用すると、目的を達成できます。
myObject.doSomeStuff();
verify(myMockedOtherObject, never()).someMethodOrOther(
Mockito.anyString(),
Mockito.anyString()
);
verify
とnever
のように静的インポートを使用すると、少し冗長にできます。
このようなことをするには、引数マッチャーを使用する必要があります。メソッド内のすべてのパラメーターに対応する引数マッチャーを提供しますが、正しいタイプのパラメーターを選択するようにしてください。必要と思われるものはすべて http://docs.mockito.googlecode.com/hg/latest/org/mockito/Matchers.html にリストされています。
あなたのメソッドが
_public void myMethod(
String text, int count, MyClass something, List<MyClass> someList) {
// ...
}
_
検証ステートメントは次のようになります。
_verify(myMock, never()).myMethod(
anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));
_
あなたが必要とする可能性が高いマッチャーのいくつかは-
anyInt(), anyLong(), anyShort(), anyBoolean(), anyByte(), anyChar(), anyFloat(), anyDouble()
-これらは、これらの各タイプのプリミティブバージョンまたはオブジェクトバージョンのいずれかに一致します。私の例では、anyInt()
を使用してint
に一致しましたが、Integer
にも一致します。any(XXX.class)
-これは、すべてのオブジェクトタイプに一致します。私の例では、MyClass
に一致させるために使用しました。anyString()
-これはany(String.class)
を記述する別の方法ですanyListOf(XXX.class), anySetOf(XXX.class), anyMapOf(XXX.class, XXX.class)
-これらは、標準のジェネリックコレクションタイプと一致させるのに適しています。私の例では、anyListOf
を使用して_List<MyClass>
_と一致させました。他にもいくつかありますが、Javadocをざっと確認することを強くお勧めします。ただし、これらはnever()
で使用する可能性が最も高いものです。
ソリューションを提示するより明確な方法
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.never;
//Testing scenario
verify(mockObject, never()).someMethod(mockParam1, MockParam2);