Mockito oferece:
when(mock.process(Matchers.any(List.class)));
Como evitar o aviso se process
leva um em List<Bar>
vez disso?
Para Java 8 e superior, é fácil:
when(mock.process(Matchers.anyList()));
Para Java 7 e abaixo, o compilador precisa de um pouco de ajuda. Use anyListOf(Class<T> clazz)
:
when(mock.process(Matchers.anyListOf(Bar.class)));
anyListOf
. Mesmo queanyList
funcione, emite um aviso.anyListOf
está obsoleto, por isso é melhor NÃO usá-lo. Exemplo para Java 8 não funciona em caso de sobrecarga de método, por exemplo, se você tem um método aceitar 2 listas diferentes:List<DBEntity>
eList<DTO>
eu já resolveu este problema utilizandoArgumentMatchers
com genérica:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
Além do
anyListOf
acima, você sempre pode especificar genéricos explicitamente usando esta sintaxe:O Java 8 permite recentemente a inferência de tipo com base em parâmetros; portanto, se você estiver usando o Java 8, isso também funcionará:
Lembre-se de que
any()
nemanyList()
aplicarão nenhuma verificação, incluindo as de tipo ou nulas. No Mockito 2.x,any(Foo.class)
foi alterado para significar "qualquerinstanceof
Foo", masany()
ainda significa "qualquer valor incluindonull
".NOTA: O item acima mudou para ArgumentMatchers nas versões mais recentes do Mockito, para evitar colisão de nomes
org.hamcrest.Matchers
. As versões mais antigas do Mockito precisarão continuar usandoorg.mockito.Matchers
como acima.fonte
Matchers.any()
é muito conveniente!Antes do Java 8 (versões 7 ou 6), eu uso o novo método ArgumentMatchers.anyList:
fonte