Mockito: Listar Matchers com genéricos


Respostas:


279

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)));

16
Nota: isso foi descontinuado no Mockito 2. * e será removido no Mockito 3. Descontinuado porque o compilador Java 8 pode inferir o tipo agora.
Kip

@artbristol você sabe se com anySet () deve funcionar da mesma forma que anyList ()? Estou em Java 8 e um aviso é jogado no Eclipse IDE
Fernando Fradegrada

1
Melhor usar anyListOf. Mesmo que anyListfuncione, emite um aviso.
balki

3
anyListOfestá 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 ArgumentMatcherscom genérica:when(adapter.adapt(ArgumentMatchers.<DTO>anyList())).thenCallRealMethod();
edufinn

14

Além do anyListOfacima, 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 instanceofFoo", 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.Matcherscomo acima.


4
Matchers.any()é muito conveniente!
MBach

O Matchers agora está obsoleto, e aqui estão as informações do mockito "Usar ArgumentMatchers. Esta classe está obsoleta para evitar um conflito de nome com a classe Hamcrest org.hamcrest.Matchers. Esta classe provavelmente será removida na versão 3.0." static.javadoc.io/org.mockito/mockito-core/2.7.21/org/mockito/…
oddmeter

@oddmeter Alterações feitas.
22416 Jeff Bowman

5

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());
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.