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 usadoanyInt()
para coincidir con unint
, pero también coincidirá con unInteger
. -
any(XXX.class)
: esto coincidirá con cualquier tipo de objeto. En mi ejemplo, lo he usado para coincidir con unaMyClass
. -
anyString()
: esta es una forma alternativa de escribirany(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 usadoanyListOf
para coincidir con laList<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);