Mockito propose:
when(mock.process(Matchers.any(List.class)));
Comment éviter l'avertissement si processprend un à la List<Bar>place?
Mockito propose:
when(mock.process(Matchers.any(List.class)));
Comment éviter l'avertissement si processprend 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 anyListfonctionne, il émet un avertissement.
anyListOfest 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 ArgumentMatchersgénérique:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
En plus de ce qui anyListOfpré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 instanceofFoo", 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.Matcherscomme 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());