Junit
Pruebas de unidad: JUnit David Cabrero / David Alonso
Facultad de Informática Universidade da Coruña
2008/2009
Pruebas de unidad
Se validan los componentes (módulos) del sistema por separado Típicamente es un proceso de caja blanca P.e. En OO se realizan pruebas a nivel de clase Existen diversas herramientas para automatizar la ejecución de las pruebas.P.e.: En Java: JUnit Facilitan la integración en el proceso de desarrollo: escribir pruebas, codificar rutina, . . . compilar, ejecutar pruebas
Prueba de unidad
Pieza de código que pone a prueba la funcionalidad de un área del código pequeña y específica. Habitualmente, en OO, una prueba de unidad comprueba la ejecución de un método en un contexto determinado. P.e.: método list.add en unalista ordenada. Añadimos un elemento y comprobamos que la lista sigue ordenada. Cada módulo se prueba de forma aislada. Real testing checks results. Escrita y ejecutada por el programador. También documenta la intención del código.
Ventajas de las herramientas *Unit
Ventajas de automático vs. manual La ejecución no para en el primer fallo Posibilidad de grupos de pruebas (testsuites) Obtenciónde informes Integración con otras herramientas de automatización de tareas (p.e.: ant)
Anatomía de una prueba de unidad
Es una pieza de código que comprueba la ejecución de otra pieza de código. Las comprobaciones se realizan en base a aserciones.
Una aserción es una instrucción que comprueba que una condición es verdadera. Por ejemplo: int a = 2; ... ... assertTrue(a == 2); ... Si lacondición no es cierta, la aserción falla.
Ejemplo (i)
Método que calcula el número más grande de una lista. public static int calcularMayor(int[] lista) ¿ Qué pruebas escribirías ?
Ejemplo (ii)
El resultado es independiente de su posición en la lista.
[7, 8, 9] → 9 [9, 8, 2] → 9 [7, 9, 1] → 9
¿Qué ocurre si está duplicado?
[9, 8, 9, 1, 5] → 9
¿ Qué ocurre si hay uno o ceroelementos ?
[4] → 4 [ ] →?
¿ Qué ocurre si son números negativos ?
[−7, −8, −9] → −7
Ejemplo (iii)
public class Ejemplo { /** * Devuelve el número más grande de una lista. * * @param lista Una lista de enteros * @return El número más grande de la lista dada */ public static int calcularMayor(int[] lista) { intindex,max=Integer.MIN_VALUE; for (index=0; index < lista.length-1; index++) { if(lista[index] > max) { max = lista[index]; } } return max;
Ejemplo (iv)
El código de las pruebas (JUNIT). import junit.framework.*; public class TestMayor extends TestCase { public TestMayor(String name) { super(name); } public void testOrden() { assertEquals(9, Ejemplo.calcularMayor(new int[] {8,9,7})); } }
Ejemplo (v)
Demo java junit.swingui.TestRunner java junit.textui.TestRunnerTestMayor
Ejemplo (vi)
¿ Qué hacemos con la lista vacia ? Lanzar una excepción
... public static int calcularMayor(int[] lista) { int index, ... if (list.length == 0) { throw new RuntimeException("calcularMayor: Lista va ...
Añadimos una nueva prueba:
public void testVacia() { try { Ejemplo.calcularMayor(new init[] {}); fail("Should have throw an exception"); } catch (RuntimeException e) {assertTrue(true);//innecesario } }
Introducción a JUnit
Herramienta para automatizar las pruebas de unidad en Java. Basado en el uso deaserciones (assert) para caracterizar los resultados de la prueba. Las pruebas se codifican a nivel de objeto. Desarrollado por Kent Beck y Erich Gamma. Diversas interfaces de usuario:
CLI propio del framework de JUnit GUI (swing) propio del framework deJUnit Integrado en diversos entornos de desarrollo (p.e. eclipse) Herramientas de automatización de tareas (p.e. ant)
Codificación de pruebas en JUnit
Pasos básicos de una prueba
1
2 3 4
Establecer las condiciones necesarias para la prueba (reservar recursos, crear objetos, . . . ) Llamar al método que se está validando Comprobar el resultado Limpiar (objetos, recursos, . . . )
Los...
Regístrate para leer el documento completo.