martes, 8 de enero de 2008

Data Driven Test (Update)

Solamente un pequeño comentario, en ocasiones pensamos que las pruebas de record-and-play es una buena solución para crear pocas líneas de código, y en realidad si nos dan bastante libertad, sin embargo, como toda solución, tiene sus peros. En este caso mencionare algunos de ellos:


  • No puedes completar el record de la prueba hasta que se pueda pasar el test.

  • Aun cambios mínimos requieren que se vuelva a grabar el test.

  • Generalmente el test graba la interacción, no los resultados esperados o no lo hace con el detalle deseado.

  • Grabas muchas veces lo mismo (como el Login)



Operaciones muy sencillas pueden ayudarnos a simplificar la mayoría de estos tests, reorganizando la funcionalidad en maneras más prácticas; en este caso vamos a ver una aproximación a los Tests Configurables por medio de TestCase y TestSuites.

Un TestSuite es una clase que agrupa varios TestCase's dentro de uno mismo, permitiendo ejecutarlos como un todo. Por lo menos esa es la funcionalidad regular que se le da. Pero podemos usarlo para parametrizar nuestros TestCase's y asi hacer más flexible y repetible su ejecución. Vamos con un ejemplo:


public class TestParametrizado extends TestCase {
private int value;

public TestParametrizado (int valor) {
this.value = valor;
}

public void testParametrizado() {
int resultado = this.value * 4;
assertEquals(resultado % 4, 0);
}

public void runTest() {
testParametrizado();
}
}

public class TestSuiteSample {
public static TestSuite suite() {
TestSuite ts = new TestSuite();
ts.addTest(new LoginTest());
ts.addTest(new TestParametrizado(3));
ts.addTest(new LoginTest());
ts.addTest(new TestParametrizado(4));
}
}


Con una técnica tan sencilla podemos entonces crear TestCase's mas explicitos, donde estamos repitiendo aquellas cosas que son repetibles, y parametrizando aquello que sea parametrizable.