web-dev-qa-db-ja.com

Mockitoを使用して、パラメーターの任意の組み合わせで呼び出されていない模擬メソッドを検証する方法

Mockitoを使用して、パラメータの任意の組み合わせで、モックされたメソッドがまったく呼び出されなかったことを確認するにはどうすればよいですか?

例えば、私はオブジェクトを持っています-myObject-それは2番目の、モックされたオブジェクトを使用しています-myMockedOtherObject-メソッドを持っています-someMethodOrOther(String parameter1, String parameter2)

myObject.myMethod()を呼び出して、someMethodOrOther()does n'tが呼び出されることを確認します。-anyの組み合わせで。

例えば。:

_myObject.doSomeStuff();

verify(myMockedOtherObject, never()).someMethodOrOther();
_

someMethodOrOther()には特定のパラメーターを指定する必要があるため、できません。

42
Dan King

Mockitoの引数マッチャーを使用すると、目的を達成できます。

myObject.doSomeStuff();

verify(myMockedOtherObject, never()).someMethodOrOther(
    Mockito.anyString(),
    Mockito.anyString()
);

verifyneverのように静的インポートを使用すると、少し冗長にできます。

79
Matt Lachman

このようなことをするには、引数マッチャーを使用する必要があります。メソッド内のすべてのパラメーターに対応する引数マッチャーを提供しますが、正しいタイプのパラメーターを選択するようにしてください。必要と思われるものはすべて 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()で使用する可能性が最も高いものです。

17

ソリューションを提示するより明確な方法

import static org.mockito.Mockito.verify;

import static org.mockito.Mockito.never;

//Testing scenario

verify(mockObject, never()).someMethod(mockParam1, MockParam2);
1
manindra naresh