回答:
Java 8以降の場合は簡単です。
when(mock.process(Matchers.anyList()));
Java 7以下の場合、コンパイラーは少し助けを必要とします。使用anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf
。にもかかわらずanyList
作品、それは警告を発します。
anyListOf
は非推奨であるため、使用しないことをお勧めします。あなたは2つの異なるリストを受け入れる方法を持っている場合は、Java 8のための例は、例えば、メソッドオーバーロードの場合には仕事をしませんList<DBEntity>
し、List<DTO>
私が使用してこの問題を解決してきたArgumentMatchers
ジェネリックで:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
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)
「任意のinstanceof
Foo」を意味するように変更されましたが、any()
それでも「を含む任意の値」を意味しnull
ます。
注:上記は、Mockitoの新しいバージョンでArgumentMatchersに切り替えられ、との名前の衝突を回避していorg.hamcrest.Matchers
ます。Mockitoの古いバージョンはorg.mockito.Matchers
、上記のように使用し続ける必要があります。
Matchers.any()
とても便利です!
Java 8(バージョン7または6)より前のバージョンでは、新しいメソッドArgumentMatchers.anyListを使用します。
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());