examples all java mockito

java - all - Matchers.any() para valor nulo en Mockito



mockito verify (2)

Se espera que aparezca el mensaje de error que está recibiendo, ya que está usando la comparación de argumentos para un solo argumento y no para el otro. De Matchers Javadoc:

Si está utilizando coincidentes de argumentos, todos los argumentos tienen que ser proporcionados por los coincidentes.

Por lo tanto, la solución es usar un emparejador para el segundo parámetro del método también. En este caso, sería un matcher null . Dependiendo de la versión de Mockito y Java, puedes tener:

  • A partir de Mockito 2, puedes usar ArgumentMatchers.isNull() . Esto funciona con Java 8 y superior:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull());

    Tenga en cuenta que si está ejecutando Java 7 o una versión anterior, necesitará una conversión explícita para que esto funcione, ya que la inferencia de tipos en esas versiones de Java no tiene en cuenta los tipos de métodos llamados:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), (String) isNull());

  • Si estás usando Mockito 1, puedes usar Matchers.isNull(clazz) lugar:

    verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));

Para los casos de Java ≤ 7 o Mockito 1, los ejemplos utilizan un caso donde el segundo parámetro era de tipo String : tendría que reemplazarse con el tipo real del parámetro del método.

Supongamos que tengo este objeto objectDemo que llama al método objectDemoMethod con 2 parámetros String y null. Ahora quiero verificar que este método fue llamado con Mockito:

objectDemo.objectDemoMethod("SAMPLE_STRING", null);

He escrito esto:

Mockito.verify(objectDemo, Mockito.times(1)).objectDemoMethod(Matchers.any(String.class), null);

pero está dando un error:

Uso no válido de los coincidentes de argumento para el valor nulo.

¿Hay alguna otra manera de pasar el valor nulo?


isNull parece estar en desuso

Con Java 8 este método se eliminará en Mockito 3.0. Este método solo se utiliza con la amabilidad genérica para evitar la conversión, esto ya no es necesario en Java 8.

Creo que podrías usar nullable :

  • public static <T> T nullable(Class<T> clazz)

Podrías usar algo como:

verify(objectDemo, times(1)).objectDemoMethod(any(String.class), isNull(String.class));