JUnit

Introducción

 En los últimos años las pruebas unitarias han tomado mucha importancia en el desarrollo de software. Estas pruebas buscan conocer el funcinamiento de las unidades del software de forma temprana. Uno de los motivos por el cual estas pruebas son ahora más conocidas y más usadas es la incorporación de metodologías ágiles como Scrum y XP.
Si bien existen diversos enfoques y algunos procesos de desarrollo proponen variantes, normalmente las pruebas unitarias son realizadas por la misma persona que contrsuyó la unidad. El conocimiento de la unidad, por haberla construido, permite encontrar los defectos de forma rápida luego de que alguna prueba falle.

¿Qué es jUnit?

 jUnit es un frameword java que permite la realización de la ejecución de clases de manera controlada, para poder comprobar que los métodos realizan su cometido de forma correcta.
También sirve como herramienta para realizar las pruebas de regresión, que realizaremos cuando una parte del código ha sido modificada y sea necesario comprobar que se sigue cumpliendo con todos los requisitos.

¿Por qué usarlo?

Supongamos que nos encontramos en un grupo de desarrollo en el que hay varios programadores, y cada uno trabaja en un módulo de la aplicación de manera independiente, pero a su vez todos los módulos están interrelaciados.

Bien primero diremos que existen 2 tipos de pruebas que tendremos que realizar:
  • Pruebas unitarias.  Son  pruebas que comprueban la funcionalidad del módulo de forma independiente al resto de la aplicación.
  • Pruebas de integración.  En estas pruebas comprobaremos la correcta integración de los módulos, comunicación, llamadas etc…
Si realizamos algún cambio sobre alguno de los módulos como podemos estar seguros que con esta nueva versión no hemos incluido algún fallo. La única forma sería repasar manualmente una a una todas las funcionalidades de la aplicación.
Este proceso de regresión puede ser largo y tedioso, así que ¿por qué no automatizamos este proceso de pruebas?, de esta forma ahorramos en tiempo y nos aseguramos de que se han ejecutado todas las pruebas necesarias para considerar que la aplicación esta correcta.

Diseño de JUnit

JUnit está diseñado alrededor de dos patrones de diseño principales: el patrón Command y el patrón Composite.
Un TestCase es un objeto Command. Cualquier clase que contenga métodos de testeo debería extender la clase TestCase. Un TestCase puede definir cualquier número de métodos públicos testXXX(). Cuando quieres comprobar el resultado esperado y el real, invocas una variante del método assert().
Las subclases de TestCase que contienen varios métodos testXXX() pueden utilizar los métodos setUp() y tearDown() para inicializar y liberar cualquier objeto común que se vaya a testear, conocido como la "instalación" (material) del test. Cada método de tests se ejecuta sobre su propia instalación, llamando a setUp() antes y a tearDown() después de cada método para asegurarse de que no hay efectos colaterales entre ejecuciones de tests.
Los ejemplares de TestCase pueden unirse en árboles de TestSuite que invocan automáticamente todos los métodos testXXX() definidos en cada ejemplar de TestCase. Un TestSuite es una composición de otros tests, bien ejemplares de TestCase u otros ejemplares de TestSuite. El comportamiento compuesto exhibido por TestSuite te permite ensamblar suites de tests de suites de tests, de una profundidad arbitraria, y ejecutar todos los tests automáticamente para obtener un simple estado de pasado o fallado.

Conclusión 

JUnit tiene una gran importacia, ya que es usado como marco por muchas otras herramientas de soporte a las pruebas unitarias; por ejemplo, herramientas de cubrimiento, de mutantes y de data-driven. Al momento de hacer pruebas unitarias no hay que cerrarnos a una opción, tambien existe TestNG que agrega almenos tres funcionalidades que no están presentes en JUnit como lo son pasar objetos de java como parámentos de los casos de prueba a través del soporte a las pruebas que utilizan el enfoque data-driven, Definir grupos de prueba, además de que permite definir la dependencia entre pruebas, sin embargo, si podemos combinar estos dos Framework podremos estar seguros de que podremos reduccir nuestro numero de fallas dentro de nuestro sistema.

Bibliografía

- https://es.slideshare.net/ikercanarias/introduccin-a-junit
- http://programacion.net/articulo/primeros_pasos_con_junit_265

Comentarios

Entradas más populares de este blog

Cifrado Asimétrico

Proceso de depuración

Sockets