Desde o Java 8, você pode usar o any
método sem argumento e o argumento type será inferido pelo compilador:
verify(bar).doStuff(any());
Explicação
A novidade no Java 8 é que o tipo de destino de uma expressão será usado para inferir parâmetros de tipo de suas subexpressões. Antes do Java 8, apenas argumentos para métodos eram usados para inferência de parâmetro de tipo (na maioria das vezes).
Nesse caso, o tipo de parâmetro de doStuff
será o tipo de destino any()
e o tipo de valor de retorno any()
será escolhido para corresponder a esse tipo de argumento.
Esse mecanismo foi adicionado no Java 8 principalmente para poder compilar expressões lambda, mas melhora as inferências de tipo em geral.
Tipos primitivos
Isso não funciona com tipos primitivos, infelizmente:
public interface IBar {
void doPrimitiveStuff(int i);
}
verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead
O problema é que o compilador inferirá Integer
como o valor de retorno de any()
. O Mockito não estará ciente disso (devido ao apagamento do tipo) e retornará o valor padrão para os tipos de referência, que é null
. O tempo de execução tentará desmarcar o valor de retorno chamando o intValue
método antes de passá-lo para doStuff
, e a exceção será lançada.
any
método deveria funcionar. Você não procura respostas para coisas que simplesmente funcionam!any()
mas estava bemanyBoolean()
, com a qual a última parte da sua resposta esclarece lindamente.Isso deve funcionar
fonte
verify(bar).DoStuff(any[Array[Foo]])
Você pode usar
Mockito.isA()
para isso:http://site.mockito.org/mockito/docs/current/org/mockito/Matchers.html#isA(java.lang.Class)
fonte
Como eu precisava usar esse recurso para o meu projeto mais recente (a certa altura atualizamos a partir de 1.10.19), apenas para manter os usuários (que já estão usando a versão 2.1.0 ou superior do mockito-core ) atualizados, o static Os métodos das respostas acima devem ser retirados da
ArgumentMatchers
classe:Lembre-se disso se você planeja manter seus artefatos do Mockito atualizados, pois possivelmente a partir da versão 3, essa classe pode não existir mais:
Conforme 2.1.0 e acima, o Javadoc do org.mockito.Matchers declara:
Eu escrevi um pequeno artigo sobre curingas mockito se você quiser ler mais.
fonte