Mockito: Liste des correspondants avec des génériques
Mockito propose:
when(mock.process(Matchers.any(List.class)));
Comment éviter les avertissements si process
prend un List<Bar>
à la place?
Pour Java 8 et versions ultérieures, rien de plus simple:
when(mock.process(Matchers.anyList()));
Pour Java 7 et les versions ultérieures, le compilateur a besoin d'un peu d'aide. Utilisez anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
En plus de anyListOf
ci-dessus, vous pouvez toujours spécifier explicitement les génériques en utilisant cette syntaxe:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
Java 8 permet récemment l'inférence de type en fonction de paramètres. Par conséquent, si vous utilisez Java 8, cela peut également fonctionner:
when(mock.process(Matchers.any()));
N'oubliez pas que ni any()
ni anyList()
n'appliqueront de contrôles, y compris des contrôles de type ou des contrôles nuls. Dans Mockito 2.x, any(Foo.class)
a été remplacé par "any instanceof
Foo", mais any()
signifie toujours "toute valeur incluant null
".
REMARQUE: Ce qui précède a été remplacé par ArgumentMatchers dans les versions les plus récentes de Mockito, afin d'éviter une collision de noms avec org.hamcrest.Matchers
. Les anciennes versions de Mockito devront continuer à utiliser org.mockito.Matchers
comme ci-dessus.
Avant Java 8 (versions 7 ou 6), j'utilisais la nouvelle méthode ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());