2011-05-30 3 views
59

Avec Mockito je peux faire ce qui suit:Mockito: Vérification des paramètres génériques

verify(someService).process(any(Person.class)); 

Mais comment puis-je écrire cela si process prend une place Collection<Person>? Je n'arrive pas à comprendre comment l'écrire correctement. Juste obtenir des erreurs de syntaxe ...

Répondre

102

Essayez:

verify(someService).process(Matchers.<Collection<Person>>any()); 

En fait, IntelliJ suggère automatiquement ce correctif quand je tapais any() ... Malheureusement, vous ne pouvez pas utiliser l'importation statique dans ce cas.

+0

Cela semble fonctionner! – Svish

+4

Merci, ça marche ... mais Dieu a l'air horrible, il doit y avoir une meilleure façon de corriger cela ... –

+1

Bravo à la seule solution qui répond à la question comme indiqué plutôt que de cibler le cas particulier des conteneurs correspondants. –

-1

Vous ne pouvez pas exprimer cela en raison de l'effacement de type. Même si vous pouviez l'exprimer en code, Mockito n'avait aucune chance de le vérifier à l'exécution. Vous pouvez créer une interface comme

interface PersonCollection extends Collection<Person> { /* nothing */ } 

et de l'utiliser dans votre code.

Editer: J'avais tort, Mockito a anyCollectionOf(..) qui est ce que vous voulez.

+1

En fait, il * pourrait * être exprimé avec un objet "type littéral" si l'API l'acceptait: 'any (new TypeLiteral >() {})'. Ce n'est pas joli, bien sûr, mais cela fonctionne car toutes les informations de type sont disponibles au moment de l'exécution (via Reflection ou une bibliothèque de bytecodes). –

+0

@Rogerio: vous avez raison, et il semble que Mockito supporte cela maintenant. Je ne l'ai pas utilisé depuis un moment ... – Waldheinz

21

Essayez:

verify(someService).process(anyCollectionOf(Person.class)); 

Depuis la version 1.8 Mockito présente

public static <T> Collection<T> anyCollectionOf(Class<T> clazz); 
+0

Pour les autres utilisateurs qui en ont besoin, il y a aussi anyListOf() en plus de anyCollectionOf(), voir: http://stackoverflow.com/a/10512526/908677 –

+0

anyCollectionOf (Classe clazz) sera supprimé dans Mockito 3.0 et java8. Il y aura une nouvelle méthode: anyOptional (classe ) voir: https://github.com/mockito/mockito/issues/308 – Naxos84

1

si vous utilisez une méthode propre, vous pouvez même utiliser l'importation statique:

private Collection<Person> anyPersonCollection() { 
    return any(); 
} 

Ensuite, vous pouvez utiliser

verify(someService).process(anyPersonCollection()); 
Questions connexes