Mockito offre:Mockito: Lista matchers con i generici
when(mock.process(Matchers.any(List.class)));
Come evitare avviso se process
prende un List<Bar>
invece?
Mockito offre:Mockito: Lista matchers con i generici
when(mock.process(Matchers.any(List.class)));
Come evitare avviso se process
prende un List<Bar>
invece?
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)));
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()
né 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.
'' 'Matchers.any()' '' è molto conveniente! – MBach
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
@JeffBowman no sudore, lasciando solo una nota per gli altri :) – oddmeter
Nota: questo è obsoleto in Mockito 2. * e verrà rimosso in Mockito 3. Deprecato perché il compilatore Java 8 può inferire il tipo ora. – Kip
@Kip grazie Ho aggiornato la risposta – artbristol
@artbristol sai se con anySet() dovrebbe funzionare come anyList()? Sono in Java 8 e viene lanciato un avviso in Eclipse IDE –