Mockito: elenca gli abbinamenti con generici


Risposte:


279

Per Java 8 e versioni successive, è facile:

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

Per Java 7 e versioni precedenti, il compilatore necessita di un po 'di aiuto. Utilizzare anyListOf(Class<T> clazz):

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

16
Nota: questo è obsoleto in Mockito 2. * e verrà rimosso in Mockito 3. Obsoleto perché il compilatore Java 8 può inferire il tipo ora.
Salta il

@artbristol sai se con anySet () dovrebbe funzionare come anyList ()? Sono in Java 8 e viene lanciato un avviso in Eclipse IDE
Fernando Fradegrada

1
Meglio usare anyListOf. Anche se anyListfunziona, emette un avviso.
Balki,

3
anyListOfè deprecato, quindi è meglio NON usarlo. L'esempio per Java 8 non funziona in caso di sovraccarico del metodo, ad esempio se si dispone di un metodo che accetta 2 elenchi diversi: List<DBEntity>e List<DTO>ho risolto questo problema utilizzando ArgumentMatcherscon generico:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

Oltre a quanto anyListOfsopra, puoi sempre specificare i generici esplicitamente usando questa sintassi:

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

Java 8 consente di recente l'inferenza del tipo in base ai parametri, quindi se si utilizza Java 8, anche questo potrebbe funzionare:

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

Ricorda che any()anyList()verrà applicato alcun controllo, inclusi i controlli di tipo o null. In Mockito 2.x, è any(Foo.class)stato modificato per indicare "qualsiasi instanceofFoo", ma any()significa ancora "qualsiasi valore incluso null".

NOTA: quanto sopra è passato ad ArgumentMatchers nelle versioni più recenti di Mockito, per evitare una collisione di nomi con org.hamcrest.Matchers. Le versioni precedenti di Mockito dovranno continuare a utilizzare org.mockito.Matcherscome sopra.


4
Matchers.any()è molto conveniente!
MBach,

Matchers è ora deprecato, ecco le informazioni da mockito "Usa ArgumentMatchers. Questa classe è ora deprecata per evitare uno scontro di nomi con Hamcrest org.hamcrest.Matchers class. Questa classe sarà probabilmente rimossa nella versione 3.0." static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
oddmeter

@oddmeter Modifiche apportate.
Jeff Bowman,

5

Prima di Java 8 (versioni 7 o 6) utilizzo il nuovo metodo ArgumentMatchers.anyList:

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

verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.