unitarios test mock ejemplos ejemplo datos java unit-testing mocking mockito

java - test - Cómo verificar el método simulado no llamado con cualquier combinación de parámetros usando Mockito



mockito maven (3)

¿Cómo puedo verificar que no se haya llamado en absoluto a un método simulado, con cualquier combinación de parámetros, utilizando Mockito?

Por ejemplo, tengo un objeto - myObject - que usa un segundo objeto myMockedOtherObject - myMockedOtherObject - que tiene un método - someMethodOrOther(String parameter1, String parameter2) .

Quiero llamar a myObject.myMethod() y verificar que no se haya llamado a someMethodOrOther() con cualquier combinación de parámetros.

p.ej:

myObject.doSomeStuff(); verify(myMockedOtherObject, never()).someMethodOrOther();

Excepto que no puedo hacer eso, porque someMethodOrOther() requiere que se proporcionen parámetros específicos.


Necesitas usar los emparejadores de argumentos para hacer cosas como esta. Proporciona un argumento que coincida con cada parámetro de su método, pero debe asegurarse de elegir uno que tenga el tipo correcto. Todos los que probablemente necesite se enumeran en http://docs.mockito.googlecode.com/hg/latest/org/mockito/Matchers.html .

Supongamos que su método es

public void myMethod( String text, int count, MyClass something, List<MyClass> someList) { // ... }

Su declaración de verificación podría tener este aspecto.

verify(myMock, never()).myMethod( anyString(), anyInt(), any(MyClass.class), anyListOf(MyClass.class));

Algunos de los emparejadores que probablemente necesitarás son:

  • anyInt(), anyLong(), anyShort(), anyBoolean(), anyByte(), anyChar(), anyFloat(), anyDouble() : coinciden con la versión primitiva o la versión de objeto de cada uno de estos tipos. En mi ejemplo, he usado anyInt() para coincidir con un int , pero también coincidirá con un Integer .
  • any(XXX.class) : esto coincidirá con cualquier tipo de objeto. En mi ejemplo, lo he usado para coincidir con una MyClass .
  • anyString() : esta es una forma alternativa de escribir any(String.class)
  • anyListOf(XXX.class), anySetOf(XXX.class), anyMapOf(XXX.class, XXX.class) : son buenos para hacer coincidir los tipos de colección genéricos estándar. En mi ejemplo, he usado anyListOf para coincidir con la List<MyClass> .

Hay un puñado de otros, y recomiendo encarecidamente tener un breve vistazo a través del Javadoc. Pero estos son los que es más probable que uses con never() .


Puedes lograr lo que quieras con los argumentos de Mockito:

myObject.doSomeStuff(); verify(myMockedOtherObject, never()).someMethodOrOther( Mockito.anyString(), Mockito.anyString() );

Por supuesto, puede hacer que sea un poco menos detallado con una importación estática como la que tiene para verify y never .


Manera más clara de presentar la solución.

import static org.mockito.Mockito.verify; import static org.mockito.Mockito.never; //Testing scenario verify(mockObject, never()).someMethod(mockParam1, MockParam2);