Mockito offre:
when(mock.process(Matchers.any(List.class)));
Come evitare l'avvertimento se processprende List<Bar>invece un ?
Mockito offre:
when(mock.process(Matchers.any(List.class)));
Come evitare l'avvertimento se processprende 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 anyListfunziona, 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 ArgumentMatcherscon generico:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
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()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 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.
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());