eedd_ra3_ejemplo4/README.md
Isidoro Nevares Martín edbd3bdded Commit inicial
2026-03-16 10:47:22 +01:00

127 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 `@BeforeAll` y `@AfterAll` deben ser `static`.
### Ejemplo
```java
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
```java
// ✅ 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
```java
@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.
![Diagrama de pruebas](img/junit_test_flowchart.svg)
---
Fuentes: [ChatGPT](https://chat.openai.com) + [Claude](https://claude.ai)