Mockito: Liste de Rapprochement avec les génériques
Mockito offre:
when(mock.process(Matchers.any(List.class)));
Comment éviter d'avertissement si process
prend un List<Bar>
à la place?
Vous devez vous connecter pour publier un commentaire.
Mockito offre:
when(mock.process(Matchers.any(List.class)));
Comment éviter d'avertissement si process
prend un List<Bar>
à la place?
Vous devez vous connecter pour publier un commentaire.
Pour Java 8 et ci-dessus, c'est facile:
Pour Java 7 et ci-dessous, le compilateur a besoin d'un peu d'aide. Utilisation
anyListOf(Class<T> clazz)
:anyListOf
. Même sianyList
œuvres, il émet un avertissement.anyListOf
est obsolète, il est donc préférable de ne PAS l'utiliser. Exemple pour Java 8 ne fonctionne pas en cas de surcharge de la méthode, par exemple si vous avez une méthode acceptant les 2 listes différentes:List<DBEntity>
etList<DTO>
j'ai résolu ce problème en utilisantArgumentMatchers
avec générique:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
En plus de
anyListOf
ci-dessus, vous pouvez toujours spécifier les génériques explicitement à l'aide de cette syntaxe:Java 8 nouvellement permet l'inférence de type, basé sur les paramètres, donc si vous êtes à l'aide de Java 8, cela peut fonctionner ainsi:
Rappelez-vous que ni
any()
nianyList()
s'appliquera à toutes vérifications, y compris le type ou la valeur null contrôles. Dans Mockito 2.x,any(Foo.class)
a été changé pour dire "instanceof
Foo", maisany()
signifie encore "toute valeur, y comprisnull
".NOTE: 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 aurez besoin de garder à l'aide deorg.mockito.Matchers
comme ci-dessus.Matchers.any()
est très pratique!Avant Java 8 (versions 7 ou 6) je utiliser la nouvelle méthode ArgumentMatchers.anyList: