Pruebas automatizadas
Indice
1.Presentación
2.JUnit
3.Integración en Eclipse
4.Enlaces 1.Presentación
En el entorno moderno de desarrollo de software, formamos parte de equipos cada día mas grande, incluso distribuidas en el mundo entero. Para mantener la velocidad de produción que nos piden nuestros clientes en mismo tiempo que la calidad de nuestros productos, tenemos que implementar una estrategía de prueba que nos ayude a detectar lo más rapidamente possible los errores de regresión que aparecen despues de una intregración de códigos provenientes de differentes lugares del mundo, o más simplemente con la integración de la última versión de una biblioteca externa.
Una estrategía possible es aquella que se llama en inglés TDD (Test Driven Development) es decir "desarrollo orientado a pruebas". La idea es diseñar las pruebas antes de empezar el desarrollo. Incluso hay casos en que las pruebas pueden ser las especificaciones del por hacer, o al menos la mejor forma de explicar una functionalidad compleja. Porque somos muchos que entendemos mejor un ejemplo que la descripción formal de un algoritmo.
Además de ofrecer una manera sencilla de detectar los problemas, esto puede incluso formar parte de la contratación que se establece con un sub-contractor. Es decir que una entregua podria ser declarada correcta únicamente despues de que las pruebas pasaran sin error. Así, el ciclo de validación de una entragua es mucho mas corto.
2.JUnit
En la pratica, una framework java que se llama JUnit nos ofrece una posibilidad sensilla para implementar una estrategía de pruebas automatizadas. JUnit nos permite probar todo nuestro código, eligiendo el nivel de detalle de nuestras pruebas.
En primer lugar decidimos implementar una suma de dos Double que verifica antes de sumar que ninguno de los dos argumentos esté nulo, y si hay alguno nulo genera una excepción. Nuestras pruebas serán :
2 + 5 = 5
2 + 3 != 6
2 + null -> excepción
Arrancamos escribiendo una versión de classe para este servicio :
class MiSuma
{
public Double suma(Double d1, Double d2)
{
if (d1 == null || d2 == null)
{
throw new IllegalArgumentException("Argumentos nulos prohibidos");
}
return new Double(d1.doubleValue()+d2.doubleValue());
}
}
La idea es asegurarnos que este método funcionara bien con varios ejemplos de valores. Para eso, usamos el framework JUnit para implementar la prueba, creando una classe basanda en la classe TestCase de JUnit :
class MiSumaTest extends TestCase
{
public void testSumaSencilla()
{
MiSuma miSuma = new MiSuma();
assertEquals(new Double(5), miSuma.suma(new Double(2), new Double(3)));
assertNotSame(new Double(6), miSuma.suma(new Double(2), new Double(3)));
}
public void testSumaExcepcion()
{
MiSuma miSuma = new MiSuma();
boolean excepcion = false;
try
{
miSuma.suma(new Double(2), null);
}
catch (IllegalArgumentException e)
{
excepcion = true;
}
assertTrue(excepcion);
}
} 3.Integración en Eclipse
Eclipse, al menos la version 3.0, viene con JUnit. Resulta muy fácil escribir classes de pruebas. Desde cualquiera classe se puede acceder al menu de creación de la classe de prueba correspondiente :
Si ya no la tenía en su proyecto, Eclipse preguntará por añadir el archivo junit.jar en el proyecto. Afecta un nombre a la classe de prueba y añade el código de arriba con los dos metodos de prueba.
Para despues arrancar la prueba se accede al menu directamente desde el proyecto. Así no necesitamos arrancar una prueba específica pero dejamos el plugin Junit de Eclipse buscar todas la classes de pruebas dentro del proyecto :
4.Enlaces
Queda hablar de TestSuite y de creación dinámica de classes de pruebas pero esto formara parte de un articulo mas amplio. Despues de esta pequena visión os aconsejo visitar estos dos siguientes sitios :
-
www.junit.org -
maven.apache.org/plugins/maven-surefire-plugin/