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