1. ホーム
  2. java

MockitoでNULL値に対するMatchers.any()

2023-09-26 05:31:28

質問

次のようなオブジェクトがあるとします。 objectDemo というメソッドを呼び出しているとします。 objectDemoMethod を 2 つのパラメータ Stringnull . さて,このメソッドが呼ばれたことをMockitoで検証してみたいと思います.

objectDemo.objectDemoMethod("SAMPLE_STRING", null);

このように書きました。

Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);

と表示されますが、エラーになります。

null値に対する引数マッチャーの使用は無効です。

を渡す他の方法はありますか? null の値を渡す他の方法はありますか?

どのように解決するのですか?

引数マッチャーを片方の引数だけに使用し、もう片方には使用していないため、表示されるエラーメッセージは予想されたものです。以下より Matchers Javadocです。

引数マッチャーを使っている場合。 すべての引数 はマッチャーによって提供されなければなりません。

したがって、この修正はメソッドの2番目のパラメータにもマッチャーを使用することです。この場合、以下のようなマッチャーになります。 null . MockitoやJavaのバージョンにもよりますが。

  • Mockito 2 からは ArgumentMatchers.isNull() . Java 8 以上で動作します。

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull());
    
    

    Java 7またはそれ以前のバージョンでは、型推論が呼び出されたメソッドの型を考慮しないため、これを動作させるには明示的なキャストが必要になることに注意してください。

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), (String) isNull());
    
    
  • Mockito 1を使用している場合、以下のように Matchers.isNull(clazz) の代わりに

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));
    
    

Java ≦ 7またはMockito 1の場合、例では、第2パラメータがタイプ String である場合、メソッド・パラメーターの実際の型に置き換える必要があります。