Mockito: List Matchers with generics

JavaGenericsWarningsMockitoMatcher

Java Problem Overview


Mockito offers:

Java Solutions


Solution 1 - Java

For Java 8 and above, it's easy:

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

For Java 7 and below, the compiler needs a bit of help. Use anyListOf(Class<T> clazz):

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

Solution 2 - Java

In addition to anyListOf above, you can always specify generics explicitly using this syntax:

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

Java 8 newly allows type inference based on parameters, so if you're using Java 8, this may work as well:

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

Remember that neither any() nor anyList() will apply any checks, including type or null checks. In Mockito 2.x, any(Foo.class) was changed to mean "any instanceof Foo", but any() still means "any value including null".

NOTE: The above has switched to ArgumentMatchers in newer versions of Mockito, to avoid a name collision with org.hamcrest.Matchers. Older versions of Mockito will need to keep using org.mockito.Matchers as above.

Solution 3 - Java

Before Java 8 (versions 7 or 6) I use the new method ArgumentMatchers.anyList:

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

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

Solution 4 - Java

I needed anyList() with a typed ArrayList, the following worked:

(ArrayList<Bar>) ArgumentMatchers.<Bar>anyList()

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPhilippe BlayoView Question on Stackoverflow
Solution 1 - JavaartbristolView Answer on Stackoverflow
Solution 2 - JavaJeff BowmanView Answer on Stackoverflow
Solution 3 - JavaAlan TealsView Answer on Stackoverflow
Solution 4 - JavaDominik EhrenbergView Answer on Stackoverflow