Enlaces e información

Comenta lo que creas oportuno.


Otros posts
Mockeando el Interfaz
Preparación de un interfaz para testeo unitario

Testeando el Interfaz.

Escrito por Roberto M. Oliva en Mayo 25th, 2006

En el post anterior explique como aplicar el patrón MVC para facilitar el testeo del funcionamiento de un formulario (Preparación de un interfaz para testeo unitario).
En este post voy a intentar explicar como se realizarían dichos testeos.
Recordemos, que por un lado partimos de la definición de 2 interfaces: ICalculadoraView para los datos del formulario e ICalculadoraController para las acciones que realiza dicho formulario. Pues el truco está en crear una implementación de ICalculadoraView que simplemente nos ayude a testear. Dicha implementación será la siguiente:

// Clase del manejo de la vista para realizar
// testeos unitarios
public class CCalculadoraTestView
: ICalculadoraView
{
// Variables donde se guardaran los valores
protected double m_dblOperador1;
protected double m_dblOperador2;
protected double m_dblResultado;
protected eOperacion m_eOperacion;

// Constructor
public CCalculadoraTestView()
{
}

// Implemetacion del interfaz
public double Operador1
{
get {return m_dblOperador1;}
set {m_dblOperador1 = value; }
}
public double Operador2
{
get {return m_dblOperador2;}
set {m_dblOperador2 = value;}
}
public double Resultado
{
get {return m_dblResultado;}
set {m_dblResultado = value; }
}
public eOperacion Operacion
{
get {return m_eOperacion;}
set {m_eOperacion = value;}
}
}

Una vez hecho esto, será muy fácil realizar los testeos. Uno por cada operación es lo recomendable:

[TestFixture()]
public class TestCalculadora
{
protected ICalculadoraView m_objCalculadoraView;
protected ICalculadoraController m_objCalculadoraController;
protected const double c_dblOp1 = 2.23;
protected const double c_dblOp2 = 3.45;

[NUnit.Framework.SetUp()]
public void Setup()
{
m_objCalculadoraView = new CCalculadoraTestView();
m_objCalculadoraController = new CCalculadoraController(m_objCalculadoraView);
m_objCalculadoraView.Operador1 = c_dblOp1;
m_objCalculadoraView.Operador2 = c_dblOp2;
}

[Test()]
public void TestCalculoSuma()
{
// Probar que la suma funciona
m_objCalculadoraView.Operacion = eOperacion.eSuma;
m_objCalculadoraController.Calcular ();
Assert.AreEqual(m_objCalculadoraView.Resultado, c_dblOp1 + c_dblOp2);
}
[Test()]
public void TestCalculoResta()
{
// Probar que la resta funciona
m_objCalculadoraView.Operacion = eOperacion.eResta;
m_objCalculadoraController.Calcular ();
Assert.AreEqual(m_objCalculadoraView.Resultado, c_dblOp1 - c_dblOp2);
}
[Test()]
public void TestCalculoMultiplicacion()
{
// Probar que la multiplicacion funciona
m_objCalculadoraView.Operacion = eOperacion.eMultiplicacion;
m_objCalculadoraController.Calcular ();
Assert.AreEqual(m_objCalculadoraView.Resultado, c_dblOp1 * c_dblOp2);
}
[Test()]
public void TestCalculoDivision()
{
// Probar que la division funciona
m_objCalculadoraView.Operacion = eOperacion.eDivision;
m_objCalculadoraController.Calcular ();
Assert.AreEqual(m_objCalculadoraView.Resultado, c_dblOp1 / c_dblOp2);
}
}

Con esto nos aseguramos que el funcionamiento del controlador y por tanto las acciones que se realizan sobre el formulario quedan testeadas y funcionan correctamente. Hay una cosa que quedaría sin testear y es la implementación de CCalculadoraView (la adaptación de los datos desde un formulario WinForm, explicado en el post anterior) y la del formulario en sí. Pero como se vio. por un lado el formulario queda reducido de código a la mínima expersión, lo cual facilita la detección de errores. Esta claro que esta aproximación no te libra de errores en la aplicación, pero si ayuda a detectarlos, reduciendo los lugares donde pueden producirse, lo cual no es poco.

Otra aproximación al testeo sería utilizando Mocks, pero esto lo explicaré en un siguiente post.



Escriba un comentario

Dediquele un momento a comentar lo que piensa. Esta permitido usar HTML básico para formatear el escrito.

Comentarios de los lectores

[…] Testeando el interfaz […]