2012-05-09 12 views

risposta

208

Per Java 8 e, soprattutto, è facile:

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

Per Java 7 e al di sotto, il compilatore ha bisogno di un po 'di aiuto. Utilizzare anyListOf(Class<T> clazz):

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

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

+0

@Kip grazie Ho aggiornato la risposta – artbristol

+0

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

10

In aggiunta a anyListOf sopra, è possibile specificare sempre farmaci generici in modo esplicito utilizzando questa sintassi:

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

Java 8 di recente consente inferenza di tipo sulla base di parametri, quindi se si sta utilizzando Java 8, questo può funzionare così:

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

Ricordate che né any()anyList() w non applicare eventuali assegni, inclusi controlli di tipo o nulli. In Mockito 2.x, any(Foo.class) è stato modificato in "qualsiasi instanceof Foo", ma any() significa ancora "qualsiasi valore compreso null".

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

+2

'' 'Matchers.any()' '' è molto conveniente! – MBach

+0

I Matchers ora sono deprecati, ecco le informazioni di mockito "Usa ArgumentMatchers.Questa classe è ora deprecata per evitare un conflitto di nomi con la classe org.hamcrest.Matchers di Hamcrest. Questa classe verrà probabilmente rimossa nella versione 3.0." https://static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/Matchers.html – oddmeter

+0

@JeffBowman no sudore, lasciando solo una nota per gli altri :) – oddmeter