64 votes

Mockito : Vérification avec des paramètres génériques

Avec Mockito, je peux faire ce qui suit :

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

Mais comment puis-je écrire cela si process toma un Collection<Person> à la place ? Je n'arrive pas à trouver comment l'écrire correctement. J'obtiens des erreurs de syntaxe...

106voto

Tomasz Nurkiewicz Points 140462

Essayez :

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

En fait, IntelliJ a automatiquement suggéré cette correction lorsque j'ai tapé any() ... Malheureusement, vous ne pouvez pas utiliser l'importation statique dans ce cas.

25voto

user2436568 Points 71

Essayez :

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

Depuis la version 1.8 Mockito présente

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

1voto

fxa Points 11

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

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

Vous pouvez alors utiliser

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

0voto

Comme alternative à la réponse acceptée, vous pouvez essayer :

verify(someService).process(Mockito.<SomeGenericClass<Person>>any());

Où j'ai utilisé org.mockito.Mockito au lieu de Matchers .

-1voto

Waldheinz Points 6308

Vous ne pouvez pas l'exprimer à cause de l'effacement des types. Même si vous pouviez l'exprimer en code, Mockito n'a aucune chance de le vérifier à l'exécution. Vous pourriez créer une interface comme

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

à la place et utilisez-le dans tout votre code.

Edit : j'avais tort, Mockito a touteCollectionOf(..) ce qui est ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X