2010-09-11 23 views
6

Digamos que tengo una clase¿Es el caso correcto para Mockito spy?

class SomeClass 
{ 
    public void methodA() 
    {} 

    public void methodB() 
    {} 

    public void someMethod() 
    { 
    methodA(); 
    methodB(); 
    } 
} 

me gustaría probar el comportamiento de algunMetodo() con Mockito.

La única forma en que podría pensar es en usar spy();

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 falta algo y hay una mejor (correcta) forma de verificar que se llamaron al métodoA y al métodoB sin llamarlos explícitamente en el caso de prueba.

Gracias.

Respuesta

6

Sí, spy() es adecuado para su propósito. La advertencia se debe al hecho de que se invocan métodos reales y, por lo tanto, puede obtener resultados inesperados (por ejemplo, retirar dinero real de una cuenta bancaria)

-1

Si su código necesita espía para probar la unidad, algo no funciona. Spy es un primer signo de olor a código. Usted tiene dos opciones para evitar que en su ejemplo:

  1. Puede evitar burlarse de uno de los métodos y probar todo el algunMetodo.
  2. Si el métodoA y el métodoB realmente se deben burlar, puede moverlos a una clase separada, etc.
Cuestiones relacionadas