Mockitoが提供するもの:
when(mock.process(Matchers.any(List.class)));
process
が代わりにList<Bar>
を使用する場合の警告を回避するにはどうすればよいですか?
Java 8以降の場合、簡単です。
when(mock.process(Matchers.anyList()));
Java 7以下の場合、コンパイラには少し助けが必要です。 anyListOf(Class<T> clazz)
を使用します。
when(mock.process(Matchers.anyListOf(Bar.class)));
上記のanyListOf
に加えて、次の構文を使用してジェネリックを常に明示的に指定できます。
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8では、パラメーターに基づく型推論が新たに許可されているため、Java 8を使用している場合、これも同様に機能します。
when(mock.process(Matchers.any()));
any()
もanyList()
も、タイプチェックやnullチェックなどのチェックを適用しないことに注意してください。 Mockito 2.xでは、any(Foo.class)
は「any instanceof
Foo」を意味するように変更されましたが、any()
は「null
を含むすべての値」を意味します。
注:Mockitoの新しいバージョンでは、org.hamcrest.Matchers
との名前の衝突を避けるために、上記は ArgumentMatchers に切り替わりました。 Mockitoの古いバージョンでは、上記のようにorg.mockito.Matchers
を使用し続ける必要があります。
Java 8(バージョン7または6)の前に、新しいメソッドArgumentMatchers.anyListを使用します。
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());