2013-10-10 17 views
24

疑似メソッドが全く呼び出されていないことを確認するにはどうすればいいですか?Mockitoを使用して呼び出されなかった疑似メソッドを確認する方法

たとえば、私はオブジェクト-を持っています - それはメソッド-を持つ2番目の模擬オブジェクト - myMockedOtherObject - を使用しています。

私はmyObject.myMethod()を呼び出し、someMethodOrOther()呼び出されていないことを確認したい - いずれかとパラメータの組み合わせ。

例えば:

myObject.doSomeStuff(); 

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

someMethodOrOther()が供給されるように特定のパラメータを必要とするため、私は、それを行うことができない場合を除き。

答えて

55

あなたはMockitoの引数マッチャで欲しいものを達成することができます:もちろん

myObject.doSomeStuff(); 

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

あなたはverifyneverのために持っているように、あなたは、静的インポートとその少し冗長にすることができます。

+6

OP:特定のメソッド呼び出しのための 'never()'は、メソッドが呼び出されていないことを確認する最良の方法です。他のすべてのメソッド呼び出しを確認した場合や、他のメソッド呼び出しがない場合は、 'verifyNoMoreInteractions(...)'と 'verifyZeroInteractions(...) 'あなたの処分で;彼らはあなたのテストをあなたが望むよりも脆くすることができます。だから、彼らはマットのソリューションほど良くありません。 –

12

このようなことをするには、引数マッチャーを使用する必要があります。メソッドのすべてのパラメーターに対応する引数マッチャーを指定しますが、正しいタイプのパラメーターを選択する必要があります。必要と思われるものはすべて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)を書く別の方法である - これらは、標準のジェネリックコレクション型を照合するのに適しています。私の例では、List<MyClass>と一致するようにanyListOfを使用しました。

他にもいくつかありますが、Javadocを簡単に見てみることを強くおすすめします。しかし、これらはあなたがnever()でもっとも使用する可能性が高いものです。

関連する問題