web-dev-qa-db-ja.com

Mockito:ジェネリックを含むリストマッチャー

Mockitoが提供するもの:

when(mock.process(Matchers.any(List.class)));

processが代わりにList<Bar>を使用する場合の警告を回避するにはどうすればよいですか?

148
Philippe Blayo

Java 8以降の場合、簡単です。

when(mock.process(Matchers.anyList()));

Java 7以下の場合、コンパイラには少し助けが必要です。 anyListOf(Class<T> clazz)を使用します。

when(mock.process(Matchers.anyListOf(Bar.class)));
248
artbristol

上記の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を使用し続ける必要があります。

13
Jeff Bowman

Java 8(バージョン7または6)の前に、新しいメソッドArgumentMatchers.anyListを使用します。

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
0
Miguel RS