Desde Java 8 puede usar el any
método sin argumentos y el compilador inferirá el argumento de tipo:
verify(bar).doStuff(any());
Explicación
Lo nuevo en Java 8 es que el tipo de destino de una expresión se usará para inferir los parámetros de tipo de sus subexpresiones. Antes de Java 8, solo los argumentos de los métodos se usaban para la inferencia de parámetros de tipo (la mayoría de las veces).
En este caso, el tipo de parámetro de doStuff
será el tipo de destino para any()
, y el tipo de valor de retorno de any()
será elegido para que coincida con ese tipo de argumento.
Este mecanismo se agregó en Java 8 principalmente para poder compilar expresiones lambda, pero en general mejora las inferencias de tipos.
Tipos primitivos
Esto no funciona con tipos primitivos, desafortunadamente:
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
El problema es que el compilador inferirá Integer
como el valor de retorno de any()
. Mockito no se dará cuenta de esto (debido a la eliminación de tipo) y devolverá el valor predeterminado para los tipos de referencia, que es null
. El tiempo de ejecución intentará desempaquetar el valor de retorno llamando al intValue
método antes de pasarlo doStuff
, y se genera la excepción.
any
método debería funcionar. ¡No buscas respuestas para cosas que simplemente funcionan!any()
pero estaba bienanyBoolean()
, lo que la última parte de su respuesta arroja luz hermosamente.Esto debería funcionar
fuente
verify(bar).DoStuff(any[Array[Foo]])
Puedes usar
Mockito.isA()
para eso:http://site.mockito.org/mockito/docs/current/org/mockito/Matchers.html#isA(java.lang.Class)
fuente
Como necesitaba usar esta función para mi último proyecto (en un momento lo actualizamos desde el 1.10.19), solo para mantener actualizados a los usuarios (que ya usan la versión 2.1.0 o superior de mockito-core ), la estática Los métodos de las respuestas anteriores deben tomarse de la
ArgumentMatchers
clase:Tenga esto en cuenta si planea mantener sus artefactos Mockito actualizados, ya que posiblemente a partir de la versión 3, es posible que esta clase ya no exista:
Según 2.1.0 y superior, Javadoc de org.mockito.Matchers establece:
He escrito un pequeño artículo sobre comodines de mockito si está listo para leer más.
fuente