MÓDULO 9 - Pruebas con Spring Boot
¡Bienvenido al Módulo 9! 🧪
Su aplicación funciona... pero ¿cómo estar seguro de que siempre funcionará? ¿Después de cada modificación, después de cada despliegue? Las pruebas automatizadas son su red de seguridad.
Este módulo le enseña a escribir pruebas profesionales que garantizan la calidad de su código.
🎓 Objetivos de Aprendizaje
Al final de este módulo, usted será capaz de:
- ✅ Comprender la pirámide de pruebas
- ✅ Escribir pruebas unitarias con JUnit 5
- ✅ Utilizar Mockito para mockear dependencias
- ✅ Crear pruebas de integración con @SpringBootTest
- ✅ Probar APIs REST con MockMvc
- ✅ Medir la cobertura de código
📚 Prerrequisitos
Antes de comenzar este módulo, usted debe haber:
- ✅ Completado los Módulos 1 a 8
- ✅ Dominado la arquitectura de 3 capas
- ✅ Creado servicios y repositorios Spring
- ✅ Sentirse cómodo con las APIs REST
🗺️ Plan del Módulo
Parte Teórica (5 capítulos)
Capítulo 1: Introducción a las Pruebas
Duración: 30 minutos
Contenido:
- ¿Por qué probar?
- La pirámide de pruebas
- Pruebas unitarias vs integración vs E2E
- TDD y BDD
- Configuración Maven/Gradle
¿Por qué es importante? Comprender la estrategia de pruebas
Capítulo 2: Pruebas Unitarias con JUnit 5
Duración: 1 hora
Contenido:
- Anotaciones JUnit 5 (@Test, @BeforeEach, etc.)
- Aserciones (assertEquals, assertTrue, assertThrows)
- Pruebas parametrizadas
- Ciclo de vida de las pruebas
- Buenas prácticas
¿Por qué es importante? La base de todas las pruebas
Capítulo 3: Mocking con Mockito
Duración: 1 hora
Contenido:
- ¿Por qué mockear?
- @Mock, @InjectMocks, @Spy
- when().thenReturn()
- verify() y argument matchers
- Stubbing y excepciones
¿Por qué es importante? Aislar las unidades a probar
Capítulo 4: Pruebas de Integración
Duración: 45 minutos
Contenido:
- @SpringBootTest
- @DataJpaTest para los repositorios
- @WebMvcTest para los controladores
- TestContainers
- Perfiles de prueba
¿Por qué es importante? Probar los componentes juntos
Capítulo 5: Pruebas REST API
Duración: 45 minutos
Contenido:
- MockMvc en detalle
- WebTestClient
- Prueba de respuestas JSON
- Prueba de errores y excepciones
- RestAssured (bonus)
¿Por qué es importante? Validar sus endpoints
Parte Práctica (3 TPs)
TP9.1: Pruebas Unitarias - Capa de Servicio
Duración: 1h30
Objetivo: Probar una capa de servicio completa
Usted va a:
- Escribir pruebas para un ProductService
- Mockear el repositorio
- Probar casos nominales y de error
- Alcanzar más del 80% de cobertura
TP9.2: Pruebas de Integración - Repositorio
Duración: 1h30
Objetivo: Probar la persistencia con una base de datos real
Usted va a:
- Utilizar @DataJpaTest
- Probar consultas personalizadas
- Verificar las restricciones
- Utilizar H2 para las pruebas
TP9.3: Pruebas REST API - Controlador
Duración: 1h30
Objetivo: Probar la API REST completa
Usted va a:
- Utilizar MockMvc
- Probar todos los endpoints CRUD
- Validar las respuestas JSON
- Probar la seguridad
📊 Duración Total
| Tipo | Duración |
|---|---|
| Teoría | 4h (5 capítulos) |
| Práctica | 4h30 (3 TPs) |
| Total | 8h30 (~2-3 sesiones) |
🎯 Lo Que Usted Va a Comprender
Antes de este Módulo
// Usted prueba manualmente con Postman... 😰
// Y después de cada modificación:
// "¿Sigue funcionando?"
// "Tengo miedo de romper algo..."
// "No me atrevo a refactorizar..."
Después de este Módulo
@Test
void shouldCalculateOrderTotal() {
// Given
Order order = new Order();
order.addItem(new Item("Laptop", 1000.0, 2));
order.addItem(new Item("Mouse", 50.0, 1));
// When
double total = orderService.calculateTotal(order);
// Then
assertThat(total).isEqualTo(2050.0);
}
// ✅ 150 tests passed in 3.2s
// Coverage: 87%
// Confianza: 100% 😎
Usted sabrá:
- ✅ Escribir pruebas legibles y mantenibles
- ✅ Mockear las dependencias correctamente
- ✅ Probar cada capa de la aplicación
- ✅ Refactorizar sin miedo
- ✅ Detectar regresiones automáticamente
🚀 Por Qué Este Módulo Es Esencial
1. Confianza en el Código
Sin pruebas:
- "Creo que funciona" 🤞
- Miedo de modificar el código existente
- Bugs descubiertos en producción
Con pruebas:
- "Sé que funciona" ✓
- Refactorización con confianza
- Bugs detectados inmediatamente
2. Documentación Viva
@Test
void userShouldNotBeAbleToWithdrawMoreThanBalance() {
// ¡Esta prueba documenta una regla de negocio!
Account account = new Account(100.0);
assertThrows(InsufficientFundsException.class,
() -> account.withdraw(150.0));
}
3. Competencia Requerida
Ofertas de empleo Java:
- "TDD/BDD" ✓
- "JUnit, Mockito" ✓
- "Cobertura de código > 80%" ✓
- "Pruebas automatizadas obligatorias" ✓
🗺️ Progresión en la Formación
¡Módulo 9 = Garantizar la calidad antes del despliegue!
📖 Cómo Abordar Este Módulo
Teoría Y Práctica Juntas
- Capítulo 1 (Introducción) → Comprender la estrategia
- Capítulo 2 (JUnit) + TP9.1 → Practicar inmediatamente
- Capítulo 3 (Mockito) → Completar el TP9.1 con mocks
- Capítulo 4 (Integración) + TP9.2 → Pruebas de repositorio
- Capítulo 5 (API) + TP9.3 → Pruebas de controlador
Tiempo Recomendado
Opción Intensiva (1.5 días):
- Día 1 Mañana: Capítulos 1-2 + inicio TP9.1
- Día 1 Tarde: Capítulo 3 + fin TP9.1
- Día 2 Mañana: Capítulos 4-5 + TP9.2
- Día 2 Tarde: TP9.3
Opción Progresiva (3 sesiones):
- Sesión 1: Capítulos 1-2 + TP9.1
- Sesión 2: Capítulos 3-4 + TP9.2
- Sesión 3: Capítulo 5 + TP9.3
✅ Autoevaluación
Antes de comenzar, responda:
- ¿Sabe qué es una prueba unitaria? ☐ Sí ☐ No
- ¿Ha utilizado JUnit alguna vez? ☐ Sí ☐ No
- ¿Conoce el mocking? ☐ Sí ☐ No
- ¿Ha oído hablar de MockMvc? ☐ Sí ☐ No
- ¿Sabe qué es la cobertura de código? ☐ Sí ☐ No
¡Después del módulo, deberá responder "Sí" a TODO!
🎯 Próximo Paso
¿Listo para escribir pruebas profesionales?
➡️ Comenzar con el Capítulo 1: Introducción a las Pruebas