Mockito offre:
when(mock.process(Matchers.any(List.class)));
Come evitare l'avvertimento se process
prende List<Bar>
invece un ?
Mockito offre:
when(mock.process(Matchers.any(List.class)));
Come evitare l'avvertimento se process
prende List<Bar>
invece un ?
Risposte:
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)));
anyListOf
. Anche se anyList
funziona, emette un avviso.
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 ArgumentMatchers
con generico:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Oltre a quanto anyListOf
sopra, 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()
né anyList()
verrà applicato alcun controllo, inclusi i controlli di tipo o null. In Mockito 2.x, è any(Foo.class)
stato modificato per indicare "qualsiasi instanceof
Foo", 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.Matchers
come sopra.
Matchers.any()
è molto conveniente!
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());