Mockito oferece:
when(mock.process(Matchers.any(List.class)));
Como evitar o aviso se process
leva um em List<Bar>
vez disso?
Mockito oferece:
when(mock.process(Matchers.any(List.class)));
Como evitar o aviso se process
leva um em List<Bar>
vez disso?
Respostas:
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 que anyList
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>
e List<DTO>
eu já resolveu este problema utilizando ArgumentMatchers
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:
when(mock.process(Matchers.<List<Bar>>any(List.class)));
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á:
when(mock.process(Matchers.any()));
Lembre-se de que any()
nem anyList()
aplicarão nenhuma verificação, incluindo as de tipo ou nulas. No Mockito 2.x, any(Foo.class)
foi alterado para significar "qualquer instanceof
Foo", mas any()
ainda significa "qualquer valor incluindo null
".
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 usando org.mockito.Matchers
como acima.
Matchers.any()
é muito conveniente!
Antes do Java 8 (versões 7 ou 6), eu uso o novo método ArgumentMatchers.anyList:
import static org.mockito.Mockito.*;
import org.mockito.ArgumentMatchers;
verify(mock, atLeastOnce()).process(ArgumentMatchers.<Bar>anyList());