Es un caso adecuado para Mockito espía?
-
02-10-2019 - |
Pregunta
Vamos a decir que tengo una clase
class SomeClass
{
public void methodA()
{}
public void methodB()
{}
public void someMethod()
{
methodA();
methodB();
}
}
Me gustaría comportamiento de la prueba de algunMetodo () con Mockito.
La única manera en que podía pensar es el uso de espionaje ();
Algo así como
SomeClass someClass = spy(new SomeClass());
someClass.someMethod();
InOrder inOrder = inOrder(someClass);
inOrder.verify(someClass).methodA();
inOrder.verify(someClass).methodB();
Soy nuevo en el Mockito y documentación dice
"espías reales deben usarse con cuidado y, en ocasiones, por ejemplo cuando se trata de código heredado."
Así que tal vez me estoy perdiendo algo y no hay manera mejor (derecha) para verificar que MethodA y methodB fueron llamados sin llamar de forma explícita en el caso de prueba.
Gracias.
Solución
Sí, spy()
es apto para su propósito. La advertencia se debe al hecho de que los métodos reales se invocan, y por lo tanto se pueden obtener resultados inesperados (por ejemplo - dinero real está retirando de una cuenta bancaria)
Otros consejos
Si el código necesita espía para las pruebas unitarias - algo malo. Spy es un primer signo de un olor código. Usted tiene dos opciones para evitar que en su ejemplo:
- Usted puede evitar burlador del método y probar todo el algunMetodo.
- Si MethodA y methodB es realmente necesita ser burlado -. Puede moverlos a clase separada etc.