Me gustaría probar un método en una clase que he hecho, pero este método requiere que se llame primero a otro método. Ejemplo:Pruebas unitarias de métodos dependientes
// This would work
MyClass myClass1 = new MyClass(mockDevice);
myClass1.Run(myDatastructure);
myClass1.Stop();
// This would throw an InvalidOperationException
MyClass myClass2 = new MyClass(mockDevice);
myClass2.Stop();
Run
está comenzando una operación en un dispositivo de hardware, y Stop
es, por supuesto, tratar de detener esa operación (enviando un restablecimiento mando e iniciar un tiempo de espera del temporizador).
De todos modos me gustaría probar varios post-condiciones de llamar Stop
, pero me gustaría no tener que llamar Run
, porque yo estoy probando Stop
- no Run
! Me gustaría algo como esto:
MyClass myClass = new MyClass(mockDevice);
myClass.Stop();
Assert.IsTrue(mockDevice.ResetCalled);
Hasta ahora sólo ver una posible solución, y que consiste en crear una TestableMyClass
que hereda de MyClass
, que hace que sea posible establecer el estado interno derecha de la MyClass
instancia ante llamando al Stop
. El problema con esta solución es que tengo que cambiar mi MyClass
-implementación para tener miembros protegidos en lugar de miembros privados, y I no como la idea de tener que cambiar la implementación para poder probarla.
Debo usar esta solución, ¿hay algún error en mi diseño o hay una forma más inteligente de hacerlo?
¿Entonces crees que está bien simplemente llamar a Run, Stop, Assert? – toxvaerd
Sí, eso creo. Y también vale la pena llamar a Stop without Run para comprobar que se ha lanzado la excepción requerida. En última instancia, no es válido llamar primero a Stop without Run ... –