Mockito propose:
when(mock.process(Matchers.any(List.class)));
Comment éviter l'avertissement si process
prend un à la List<Bar>
place?
Mockito propose:
when(mock.process(Matchers.any(List.class)));
Comment éviter l'avertissement si process
prend un à la List<Bar>
place?
Réponses:
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 cela anyList
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>
et List<DTO>
j'ai résolu ce problème en utilisant ArgumentMatchers
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:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
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:
when(mock.process(Matchers.any()));
Souvenez-vous que ni any()
ni anyList()
n'appliquera aucune vérification, y compris les vérifications de type ou nulles. Dans Mockito 2.x, a any(Foo.class)
été changé pour signifier "any instanceof
Foo", mais any()
signifie toujours "any value including null
".
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 à utiliser org.mockito.Matchers
comme ci-dessus.
Matchers.any()
c'est très pratique!
Avant Java 8 (versions 7 ou 6), j'utilise la nouvelle méthode ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());