|
|
||
|---|---|---|
| .settings | ||
| img | ||
| src/main/java/org/lapaloma/hogwarts | ||
| .classpath | ||
| .gitignore | ||
| .project | ||
| pom.xml | ||
| README.md | ||
JUnit 5 – Conceptos básicos
1. Anotaciones esenciales de JUnit 5
JUnit 5 usa anotaciones para indicar qué métodos son tests y cómo preparar o limpiar el entorno.
| Anotación | Cuándo se ejecuta | Para qué sirve |
|---|---|---|
@Test |
En cada test | Marca un método como test |
@BeforeEach |
Antes de cada test | Preparar el estado común (crear objetos, etc.) |
@AfterEach |
Después de cada test | Limpiar recursos (cerrar conexiones, etc.) |
@BeforeAll |
Una vez antes de todos | Inicializar recursos costosos (se ejecuta una sola vez) |
@AfterAll |
Una vez después de todos | Liberar recursos globales |
Nota: Los métodos
@BeforeAlly@AfterAlldeben serstatic.
Ejemplo
class AlumnoServiceTest {
private AlumnoService service;
@BeforeEach
void setUp() {
service = new AlumnoService(); // Se ejecuta antes de cada @Test
}
@Test
void telefonoDe9DigitosEsValido() {
// ...
}
@Test
void telefonoVacioNoEsValido() {
// ...
}
}
En este ejemplo, setUp() crea una instancia nueva de AlumnoService antes de cada test, garantizando que los tests son independientes entre sí.
2. Nomenclatura de los tests
El nombre del método de test es muy importante: cuando un test falla, el nombre es lo primero que se lee.
Convención recomendada
metodo_cuandoCondicion_retornaResultado()
| Parte | Significado |
|---|---|
metodo |
El método que se está probando |
cuandoCondicion |
La situación o entrada que se usa |
retornaResultado |
Lo que se espera que ocurra |
Ejemplos
// ✅ Nombres descriptivos
@Test
void telefonoValido_cuandoTiene9Digitos_retornaTrue() { ... }
@Test
void telefonoValido_cuandoEstaVacio_retornaFalse() { ... }
@Test
void telefonoValido_cuandoTieneLetras_retornaFalse() { ... }
// ❌ Nombres que no dicen nada
@Test
void test1() { ... }
@Test
void pruebaTest() { ... }
Con nombres descriptivos, si falla telefonoValido_cuandoTiene9Digitos_retornaTrue sabemos exactamente qué está fallando sin ni siquiera abrir el código.
3. Given – When – Then (G-W-T)
El patrón Given-When-Then es una forma de estructurar los tests que viene del enfoque BDD (Behavior Driven Development). Es equivalente al patrón AAA pero con una terminología más orientada al comportamiento.
| Fase | Significado | Equivalente AAA |
|---|---|---|
| Given | Dado un contexto inicial | Arrange |
| When | Cuando ocurre una acción | Act |
| Then | Entonces se produce un resultado | Assert |
Ejemplo
@Test
void telefonoValido_cuandoTiene9Digitos_retornaTrue() {
// Given
Alumno alumno = new Alumno();
alumno.setTelefono("123456789");
// When
boolean resultado = service.telefonoValido(alumno);
// Then
assertTrue(resultado);
}
La ventaja de G-W-T es que el test se lee casi como una frase en lenguaje natural:
Dado un alumno con teléfono de 9 dígitos, cuando compruebo si es válido, entonces el resultado es verdadero.
Esto facilita que cualquier componente del equipo, incluso sin conocimientos técnicos, entienda qué se está probando.