¿Qué son?
Las pruebas unitarias de software son una técnica de testing que se utiliza para evaluar individualmente las partes más pequeñas y aisladas de un programa de software, llamadas unidades. Estas unidades suelen ser funciones, métodos o clases. El objetivo principal de las pruebas unitarias es asegurarse de que cada unidad funcione correctamente de manera independiente antes de integrarlas en el sistema completo. Esto ayuda a detectar y corregir errores tempranos en el proceso de desarrollo de software, lo que mejora la calidad y la confiabilidad del software en general.
Hasta ahora habéis probado a mano los programas que habéis hecho. Si algo falla debéis corregirlo y volver a ejecutar la prueba introduciendo manualmente los datos de nuevo.
Mediante las herramientas específicamente diseñadas para tests unitarios este proceso se automatiza y simplifica.
JUnit
JUnit es un framework de java para realizar este tipo de pruebas.
Veamos cómo funciona.
Creamos un nuevo proyecto:
Crea un directorio llamado test
que es donde vamos a guardar cada uno de los tests que vamos a lanzar.
Y ahora vamos a decirle a IntelliJ que ahí es donde van a residir los tests. Lo hacemos pulsando el botón derecho sobre el mismo y seleccionar la opción Mark Directory as => Test Sources Root
Ahora creamos la clase Suma
y un método llamado suma
que recibe dos parámetros
Pulsa con el botón secundario en el nombre de la clase Suma
y elige la opción Show context actions
Y selecciona la opción Create Test
En el caso de que no encuentre la librería JUnit5 dale al botón Fix
Este es el código generado;
1
2
3
4
5
6
7
8
9
import static org.junit.jupiter.api.Assertions.*;
class SumaTest {
@org.junit.jupiter.api.Test
void suma() {
}
}
La parte que nos interesa es el método suma
que es el anotado como Test
y es donde vamos a escribir los test unitarios.
Por ejemplo,
1
2
3
4
5
6
7
8
9
10
11
import static org.junit.jupiter.api.Assertions.*;
class SumaTest {
@org.junit.jupiter.api.Test
void suma() {
//Esto significa que el resultado de llamar a Suma.suma(5, 6) es 11.
//Si devolviera otro resultado, la prueba ha fallado
assertEquals(11, Suma.suma(5, 6));
}
}
Fijaos que han aparecido dos iconos verdes en el lateral izquierdo del Test
El primero de ellos permite lanzar todas las pruebas que existen en el Test, mientras que el segundo botón sólo prueba el Test suma
. Ten en cuenta que puede haber más de una función de test.
Si todo va bien al finalizar el Test, aparecerá el resultado del mismo en el panel Run
de la parte inferior de la pantalla.
Como veis, el Test ha sido exitoso.
Ahora vamos a modificar el método Suma.suma
para hacerlo mal a propósito:
1
2
3
4
5
public class Suma {
public static int suma(int a, int b){
return a - b;
}
}
Si volvemos a ejecutar el test:
Ahora indicar que ha salido mal y además te muestra cuál era el resultado esperado y el que ha devuelto el método Suma.suma
Y además te indica en qué linea ha fallado el test.