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


回答:


279

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

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

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

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

16
注:これはMockito 2. *で非推奨になり、Mockito 3で削除されます。Java8コンパイラーが型を推測できるようになったため、非推奨です。
Kip

@artbristol anySet()がanyList()と同じように機能するかどうかを知っていますか?私はJava 8を使用していて、Eclipse IDEで警告がスローされます
Fernando Fradegrada 2017

1
使用する方が良いanyListOf。にもかかわらずanyList作品、それは警告を発します。
Balki 2017年

3
anyListOfは非推奨であるため、使用しないことをお勧めします。あなたは2つの異なるリストを受け入れる方法を持っている場合は、Java 8のための例は、例えば、メソッドオーバーロードの場合には仕事をしませんList<DBEntity>し、List<DTO>私が使用してこの問題を解決してきたArgumentMatchersジェネリックで:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

anyListOf上記に加えて、常に次の構文を使用してジェネリックを明示的に指定できます。

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

Java 8では、パラメーターに基づく型推論が新たに許可されているため、Java 8を使用している場合、これも機能する可能性があります。

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

型チェックやnullチェックなどのチェックは適用されず、適用any()anyList()されないことに注意してください。Mockito 2.xでは、any(Foo.class)「任意のinstanceofFoo」を意味するように変更されましたが、any()それでも「を含む任意の値」を意味しnullます。

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


4
Matchers.any()とても便利です!
MBach 2016年

Matchersは非推奨になりました。mockitoからの情報は次のとおりです。 static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/...
oddmeter

@oddmeter変更が加えられました。
Jeff Bowman 2017

5

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

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

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.