Saltar al contenido principal

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:

  1. ✅ Comprender la pirámide de pruebas
  2. ✅ Escribir pruebas unitarias con JUnit 5
  3. ✅ Utilizar Mockito para mockear dependencias
  4. ✅ Crear pruebas de integración con @SpringBootTest
  5. ✅ Probar APIs REST con MockMvc
  6. ✅ 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​

TipoDuración
Teoría4h (5 capítulos)
Práctica4h30 (3 TPs)
Total8h30 (~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​

  1. Capítulo 1 (Introducción) → Comprender la estrategia
  2. Capítulo 2 (JUnit) + TP9.1 → Practicar inmediatamente
  3. Capítulo 3 (Mockito) → Completar el TP9.1 con mocks
  4. Capítulo 4 (Integración) + TP9.2 → Pruebas de repositorio
  5. 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:

  1. ¿Sabe qué es una prueba unitaria? ☐ Sí ☐ No
  2. ¿Ha utilizado JUnit alguna vez? ☐ Sí ☐ No
  3. ¿Conoce el mocking? ☐ Sí ☐ No
  4. ¿Ha oído hablar de MockMvc? ☐ Sí ☐ No
  5. ¿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


⬅️ Volver al Plan de Curso