Concepto de pruebas unitarias
Lo que se cuenta a continuación es importante para proyectos más o menos grandes, con muchas clases y en los que participan varios desarrolladores. Si estás tú solo en tu casa haciéndote un programita pequeño, todo lo que se va a comentar es excesivo. Si estás tú solo en casa, haciéndote un programa grande que te va a llevar varios días, quizás si te venga bien. Si estás en una empresa, en un proyecto con varios desarrolladores que dura varios meses, posiblemente algo como esto debería ser obligatorio.
Cuando hacemos un trozo de código es importante hacer pruebas con él, asegurarnos que funciona y que hace exactamente lo que se espera de él. Si estamos en programación orientada a objetos, cada clase se debería probar individualmente, ver que sus métodos hacen lo que deben.
Si estamos en un proyecto importante y hay varios programadores, es posible que unos deban tocar más adelante las clases que han hecho otros. Por ello, sería bueno que las pruebas que se pasaron anteriormente a ese código se puedan repetir de forma más o menos automática. Que no esté en la memoria de alguien qué pruebas hizo y que para repetirlas haya que contar con esa persona y confiar en su memoria.
Lo ideal, por tanto, es hacer por cada clase un programa que instancie la clase y que permita probarla. Cuando necesitemos volver a probar la clase porque hemos modificado código en ella, simplemente lanzamos el programa de prueba y la probamos.
Sin embargo, las personas somos cada uno de nuestro padre y de nuestra madre. Algunos serán más rigurosos probando, otros menos. Algunos se acordarán de probar cada vez que toquen la clase de otra persona y otros símplemente pasarán. Por ello, también es deseable que todo este proceso de prueba sea lo más cómodo posible. Para ello, lo mejor es que el programa de prueba haga el solo la prueba y al final símplemente nos diga si está bien o mal la clase.
Aun así, habrá algún vaguete o despistado que no arranque este programa de prueba después de tocar la clase, así que lo más mejor es que estos programas de prueba se arranquen solos cada vez que se modifique el código de la clase.
JUnit es una librería java que nos ayuda a realizar pruebas de otras clases. La idea es que hacemos una clase de pruebas que herede de una clase de JUnit y que tenga métodos con unos nombres concretos. Esta clase de pruebas instancia la clase que se quiere probar y empieza a llamar a sus métodos con valores concretos para los parámetros y a observar los valores devueltos, para comprobar que son los esperados.
JUnit nos ofrece una forma de ejecutar todas las clases de test que hagamos y decirnos directamente si se pasan o no satisfactoriamente las pruebas. Probar el código modificado de esta manera es muy sencillo y cómodo. Basta arrancar de una sola vez todos los test de JUnit que hayamos hecho.
Otras herramientas, como maven, compilan los proyectos y si encuentran test de JUnit, los ejecutan. JUnit y maven hacen buena pareja al automatizar esta tarea. Cada vez que compilamos el proyecto, se pasan automáticamente los test y obtenemos el resultado.