Mockito propose:
when(mock.process(Matchers.any(List.class)));
Comment éviter l'avertissement si process
prend un à la List<Bar>
place?
Pour Java 8 et supérieur, c'est simple:
when(mock.process(Matchers.anyList()));
Pour Java 7 et versions antérieures, le compilateur a besoin d'un peu d'aide. Utilisez anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf
. Même si celaanyList
fonctionne, il émet un avertissement.anyListOf
est obsolète, il est donc préférable de NE PAS l'utiliser. L'exemple pour Java 8 ne fonctionne pas en cas de surcharge de méthode, par exemple si vous avez une méthode acceptant 2 listes différentes:List<DBEntity>
etList<DTO>
j'ai résolu ce problème en utilisantArgumentMatchers
générique:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
En plus de ce qui
anyListOf
précède, vous pouvez toujours spécifier des génériques explicitement en utilisant cette syntaxe:Java 8 permet récemment l'inférence de type basée sur des paramètres, donc si vous utilisez Java 8, cela peut également fonctionner:
Souvenez-vous que ni
any()
nianyList()
n'appliquera aucune vérification, y compris les vérifications de type ou nulles. Dans Mockito 2.x, aany(Foo.class)
été changé pour signifier "anyinstanceof
Foo", maisany()
signifie toujours "any value includingnull
".REMARQUE: ce qui précède est passé à ArgumentMatchers dans les versions plus récentes de Mockito, pour éviter une collision de nom avec
org.hamcrest.Matchers
. Les anciennes versions de Mockito devront continuer à utiliserorg.mockito.Matchers
comme ci-dessus.la source
Matchers.any()
c'est très pratique!Avant Java 8 (versions 7 ou 6), j'utilise la nouvelle méthode ArgumentMatchers.anyList:
la source