2012-05-09 2 views
124

Mockitoとマッチャーは提供しています:Mockito:リストジェネリック

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

processではなくList<Bar>をとる場合に警告を避けるために、どのように?上記のJava 8とするため

答えて

208

、それは簡単です:下記のJava 7とのために

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

、コンパイラは、ヘルプのビットを必要とします。 anyListOf(Class<T> clazz)を使用します。

when(mock.process(Matchers.anyListOf(Bar.class))); 
+5

注:これはMockito 2では廃止予定です。* Mockito 3では削除されます。Java 8コンパイラがその型を推測できるので廃止予定です。 – Kip

+0

@Kipありがとう私は答えを更新しました – artbristol

+0

@artbristol anySet()はanyList()と同じように動作するはずですか?私はJava 8で、Eclipse IDEで警告がスローされます。 –

10

上記anyListOfに加えて、あなたは常に、この構文を使用して明示的にジェネリックを指定することができます。

when(mock.process(Matchers.<List<Bar>>any(List.class))); 

のJava 8は、新たなパラメータに基づいて推論を入力できますので、あなたは、Javaを使用している場合8、これは同様に動作することがあります。

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

覚えておいてくださいany()anyList()ワットでもないことタイプチェックやヌルチェックなどのチェックを適用します。 Mockito 2.xではany(Foo.class)が "any instanceof Foo"を意味するように変更されましたが、any()はまだ "nullを含む任意の値"を意味します。

注:org.hamcrest.Matchersとの名前の衝突を避けるため、上記のバージョンはMockitoの新しいバージョンでArgumentMatchersに切り替えました。古いバージョンのMockitoは上記のようにorg.mockito.Matchersを使い続ける必要があります。

+2

'' 'Matchers.any()' ''は非常に便利です! – MBach

+0

Matchersは廃止されました。mockito "Using ArgumentMatchers。このクラスは、Hamcrestのorg.hamcrest.Matchersクラスと名前の衝突を避けるため、非推奨です。このクラスはバージョン3.0で削除される可能性があります。 https://static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/Matchers.html – oddmeter

+0

@JeffBowman汗がかからず、他人のためのメモを残してください:) – oddmeter