web-dev-qa-db-fra.com

Mockito: Liste des correspondants avec des génériques

Mockito propose:

when(mock.process(Matchers.any(List.class)));

Comment éviter les avertissements si process prend un List<Bar> à la place?

145
Philippe Blayo

Pour Java 8 et versions ultérieures, rien de plus simple:

when(mock.process(Matchers.anyList()));

Pour Java 7 et les versions ultérieures, le compilateur a besoin d'un peu d'aide. Utilisez anyListOf(Class<T> clazz):

when(mock.process(Matchers.anyListOf(Bar.class)));
245
artbristol

En plus de anyListOf ci-dessus, vous pouvez toujours spécifier explicitement les génériques en utilisant cette syntaxe:

when(mock.process(Matchers.<List<Bar>>any(List.class)));

Java 8 permet récemment l'inférence de type en fonction de paramètres. Par conséquent, si vous utilisez Java 8, cela peut également fonctionner:

when(mock.process(Matchers.any()));

N'oubliez pas que ni any() ni anyList() n'appliqueront de contrôles, y compris des contrôles de type ou des contrôles nuls. Dans Mockito 2.x, any(Foo.class) a été remplacé par "any instanceof Foo", mais any() signifie toujours "toute valeur incluant null".

REMARQUE: Ce qui précède a été remplacé par ArgumentMatchers dans les versions les plus récentes de Mockito, afin d'éviter une collision de noms avec org.hamcrest.Matchers. Les anciennes versions de Mockito devront continuer à utiliser org.mockito.Matchers comme ci-dessus.

12
Jeff Bowman

Avant Java 8 (versions 7 ou 6), j'utilisais la nouvelle méthode ArgumentMatchers.anyList:

import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
0
Miguel RS