IronWoods.es

Desarrollo web

Blog / Java / Preparación para realizar pruebas con JUnit

Hacer test unitarios de nuestros métodos es imprescindible para que nuestros programas funcionen correctamente y evitar posibles problemas. Las pruebas unitarias permiten, además, acometer refactorizaciones y son una forma de documentar como funciona exactamente nuestro código.

Integración de JUnit en Netbeans

Si escribimos nuestras pruebas con un framework como JUnit, podremos repetirlas de forma automática, innumerables veces, sin tener que interpretar los resultados, ni pararnos a revisar el código, salvo en caso de error.

Para crear las pruebas de mis clases use Netbeans 8.2. Las últimas versiones incluyen JUnit y permiten empezar a escribir test unitarios automatizados de forma rápida sencilla. Partiendo de la clase a testear, tenemos dos opciones:

1. Abrir la clase que queremos testear y en el menú "Tools" seleccionar "Create/Update Tests".

2. En el panel lateral "Projects" desplegando el paquete al que pertenece la clase a testear, hacer un clic derecho con el ratón sobre la misma y seleccionar en el grupo de opciones del final "Tools" y "Create/Update Tests".

Nota: con la segunda opción, haciendo clic en el paquete, podemos crear test suites y las clases de prueba para todas las clases del paquete y subpaquetes.

En ambos casos se abre la ventana "Create/Update Tests" para configurar las pruebas. Configuración a seguir:

  • Como framework seleccionar "JUnit"
  • Desmarcar la opción "Integration Tests"
  • Marcar todas las opciones de "Code Generation"
  • Omitir el resto de las opciones

Se genera una clase donde encontraremos en primer lugar una serie de métodos que se van a ejecutar antes y después de las pruebas, y permiten preparar / desmontar el entorno de pruebas, estos en principio no los tocaremos. Seguidamente veremos un método de test para cada uno de los métodos de nuestra clase.

La ubicación de la clase generada, será, en el disco:

"carpeta-de-proyecto/test/"

internamente tendremos la misma estructura que para las clases de nuestro proyecto en:

"carpeta-de-proyecto/src/"

Es decir, que si estamos testeando la clase "Foo" del paquete "xxx.foo" si nuestra clase se encuentra en:

"carpeta-de-proyecto/src/xxx/foo/Foo.java"

las pruebas las tendremos en:

"carpeta-de-proyecto/test/xxx/foo/FooTest.java"

En el panel lateral "Projects" encontraremos bajo nuestro proyecto:

  • Source packages
  • Tests packages
  • Libraries
  • Test libraries

Si nuestro código está en "Source packages", nuestros test estarán en "Tests packages".


Nota: "Tests packages" aparece en cada proyecto que iniciamos con Netbeans, inicialmente vacío.

Lanzar pruebas

Cada clase que se crea con pruebas es autoejecutable. Hacer clic derecho sobre la misma con el ratón y seleccionar "Run File": los test son lanzados.

Si acabamos de crear la clase de pruebas, todos los métodos de prueba fallan, ya que incluyen llamadas a fail( ), que iremos eliminando según implementemos los test. Además, incluyen un assert, de un tipo "generalmente" adecuado al método a testear (teniendo en cuenta su tipo de retorno) y una declaración de variables (sin valor) que se van a pasar como argumentos para las pruebas, que deberemos "rellenar".

Tip: cambiar los asserts a assertTrue() / assertFalse() si los métodos a probar tienen un retorno booleano.

Se pueden consultar los asserts disponibles en la documentación de JUnit. Es importante conocer su implementación para usarlos adecuadamente, por ejemplo assertArrayEquals() comprueba si los arrays a comparar tienen el mismo número de elementos antes de analizar estos elementos. Entonces, probar si ambos arrays tienen la misma longitud antes invocar este assert está de más, otra cuestión sería comprobar si el array obtenido tiene una longitud determinada.

Nuevos métodos: actualizando test

Al añadir un nuevo método a una clase que ya tenemos cubierta con pruebas unitarias, tendremos que añadir también el método de prueba.

El procedimiento para actualizar la clase con las pruebas es el mismo que para crearla. Las pruebas que teníamos previamente no son alteradas, simplemente se añade el método de prueba que corresponda para que lo implementemos. Sólo debe tenerse en cuenta que el método se añade al final de la clase, por lo que, si se ordenan los métodos de alguna forma*, se debe mover a donde corresponda.


* Deberían ordenarse los métodos, por visibilidad y nombre en orden alfabético.


Nota: las pruebas realizadas para escribir está entrada se hicieron usando Java 8, Netbeans 8.2 y JUnit 4.12.


27-06-2018