2011-12-14 12 views
2

プリミティブ値のカスタムマッチャーを書く方法を理解しようとしています。次のカスタムマッチャーがあるとします。Mockito - プリミティブと一致させようとするとカスタムマッチャーがNPEを投げる

class IsEven extends ArgumentMatcher<Integer> { 
    public boolean matches(Object i) { 
     return ((Integer) i) % 2 == 0; 
    } 
} 

私は次のテストを実行します。 「嘲笑」メソッドを持つクラスの既に嘲笑インスタンスは「のsomeMethod」:

@Test 
public void primatives() { 

    mocked.someMethod(2); 

    ArgumentMatcher<Integer> customMatcher = new IsEven(); 

    // ! Throws NPE ! 
    Mockito.verify(mocked).someMethod(Mockito.argThat(customMatcher)); 

} 

NullPointerExceptionが発生する理由はMockio.argThat方法は、いつも私がすることはできません推測している、ヌルを返すことですオートボクシングして整数に戻すことができます。

私はこのwoudlが一般的な使用例であるかのように感じます。

おかげで、 ロイ

答えて

6

は... Javadocを読むことができます:

まれなケースでは、パラメータは、あなたが(関連intThatを使用しなければならない原始的であるとき)、floatThat()などのメソッド。このようにすると、オートナンバーシング中にNullPointerExceptionを回避できます。

0

どのメソッドに対しても、対応するwhen()の呼び出しの代わりに、doThrow()、doAnswer()、doNothing()、doReturn()およびdoCallRealMethod()を使用できます。

スタブボイドメソッド スパイオブジェクトのスタブメソッド(以下を参照) テストの途中でモックの動作を変更するには、同じメソッドを複数回スタブします。 しかし、すべてのスタッフィングコールに対して、when()を使用する代わりにこれらのメソッドを使用することをお勧めします。

when(mock.foo()).thenThrow(new RuntimeException()); 

    //Impossible: the exception-stubbed foo() method is called so RuntimeException is thrown. 
    when(mock.foo()).thenReturn("bar"); 

    //You have to use doReturn() for stubbing: 
    doReturn("bar").when(mock).foo(); 
関連する問題