Módulo 6: Mocking, Fixtures y Validation Loops
Módulo 6: Mocking, Fixtures y Validation Loops
Módulo 6: Mocking, Fixtures y Validation Loops
Descripción de la cápsula
Hay código que no puedes testear directamente. Tu función llama a la API de OpenAI — ¿necesitas hacer una llamada real en cada test? Tu endpoint escribe en PostgreSQL — ¿necesitas un servidor de base de datos corriendo? Tu servicio envía emails — ¿van a llegar emails reales cada vez que ejecutas pytest?
La respuesta es mocking: reemplazar dependencias externas con versiones controladas que simulan el comportamiento real. Un mock de la API de OpenAI retorna una respuesta predefinida en microsegundos. Un mock de la database simula inserts y queries sin disco. Los tests se vuelven rápidos, deterministas, y baratos.
Pero mocking es solo una parte del módulo. También dominarás fixtures avanzadas (scope, factories, conftest.py profesional) y validation loops — el ciclo automático donde Claude Code ejecuta tests, detecta fallos, corrige código, y re-ejecuta. Los validation loops son el superpoder que hace agentic TDD realmente automático.
Contexto del Módulo
¿Dónde estamos?
Este es el Módulo 6 — último de Phase 2 (Workflows de Testing).
Lo que ya sabes:
- ✅ TDD workflow completo: red-green-refactor (Módulo 4)
- ✅ Coverage, edge cases, property testing (Módulo 5)
- ✅ Unit, integration, E2E tests (Phase 1)
Lo que falta: Testear código con dependencias externas y automatizar el ciclo de corrección con Claude Code.
¿Hacia dónde vamos?
Phase 1: Fundamentos TDD con AI ✅
Phase 2: Workflows de Testing
├── Módulo 4: ✅ TDD workflow completo
├── Módulo 5: ✅ Coverage y edge cases
└── Módulo 6: ← ESTÁS AQUÍ — Mocking, fixtures, validation loops
Phase 3: Proyecto Final
├── Módulo 7: → Estrategia de testing profesional
└── Módulo 8: → Proyecto integrador
Este módulo cierra Phase 2. Con mocking y validation loops, tienes todas las herramientas para Phase 3.
Objetivo Profesional
Dominar mocking para testear código con dependencias externas, organizar fixtures profesionalmente, y usar validation loops para automatizar el ciclo de corrección con Claude Code.
Al final de este módulo podrás:
- ✅ Usar
unittest.mockypytest-mockpara reemplazar APIs, databases, filesystem - ✅ Decidir cuándo mockear: servicios externos (sí), lógica interna (no), boundaries (depende)
- ✅ Crear fixtures avanzadas: scope, autouse, factories, conftest.py por directorio
- ✅ Generar mocks realistas con Claude Code
- ✅ Implementar validation loops: test→fallo→corrección→re-test automático
- ✅ Usar factory patterns para datos de test variados y realistas
Progresión del Módulo
Mapa del Módulo
| Cápsula | Tema | Qué aprenderás |
|---|---|---|
| 02 | Mocking fundamentals | unittest.mock, Mock, MagicMock, patch, return_value, side_effect |
| 03 | pytest fixtures avanzadas | scope, autouse, factories, conftest.py profesional, fixture composition |
| 04 | Validation loops con Claude Code | Ciclo automático test→fix→re-test, prompts para validation, cuándo intervenir |
| 05 | Mocking servicios externos | Mockear APIs HTTP, databases, filesystem, time, environment variables |
| 06 | Proyecto: Validation pipeline | Pipeline con mocks de OpenAI y DB, fixtures, validation loops completos |
Flujo de aprendizaje
Primero dominarás la técnica base de mocking (cápsula 02): Mock, MagicMock, patch, return_value, side_effect. Esto es la herramienta fundamental.
Luego profundizarás en fixtures avanzadas (cápsula 03): scope, factories, conftest.py profesional. Fixtures bien organizadas son la diferencia entre tests mantenibles y tests que nadie quiere tocar.
La cápsula 04 introduce los validation loops: el ciclo automático donde Claude Code usa test output como feedback para iterar. Esto es el superpoder de agentic TDD.
En la cápsula 05 aplicarás mocking a servicios reales: APIs HTTP, databases, filesystem, time. Escenarios prácticos que encontrarás en cualquier proyecto profesional.
El proyecto (cápsula 06) integra todo: un pipeline con mocks para servicios externos, fixtures para datos de test, y validation loops automáticos.
Conexión con Proyecto
Proyecto de este módulo: Validation pipeline
Construirás un pipeline de procesamiento que depende de servicios externos (API de AI, database) y crearás una test suite completa con:
- Mocks para cada servicio externo
- Fixtures organizadas en conftest.py por scope
- Factory patterns para datos de test
- Al menos 1 validation loop completo con Claude Code
Conexión con proyecto final (Módulo 8)
El proyecto final necesita mocks para servicios externos, fixtures reutilizables, y tests deterministas. Todo lo que construyes aquí se replica directamente. Los validation loops acelerarán tu desarrollo en el proyecto final.
Límites: Qué NO Se Hará en Este Módulo
- ❌ CI/CD integration — Se introduce en Módulo 7
- ❌ Docker/containers para testing — Fuera del scope
- ❌ Testing de microservicios — El foco es mocking local, no orquestación
- ❌ Mocking avanzado de concurrencia — Threads/async mocking es tema avanzado
Evidencia de Éxito
Al terminar este módulo, sabrás que tuviste éxito si:
- ✅ Puedes mockear una API externa y verificar que tu código la usa correctamente
- ✅ Puedes explicar cuándo mockear y cuándo no (con heurísticas claras)
- ✅ Puedes organizar fixtures en conftest.py por scope y directorio
- ✅ Puedes ejecutar un validation loop con Claude Code (test→fix→re-test)
- ✅ Completaste el proyecto: pipeline con mocks, fixtures, y validation loops
Resumen
- ✅ Mocking reemplaza dependencias externas con versiones controladas
- ✅ La decisión de cuándo mockear requiere juicio: servicios externos sí, lógica interna no
- ✅ Fixtures avanzadas (scope, factories, conftest.py) hacen tests mantenibles
- ✅ Validation loops automatizan el ciclo test→fix→re-test con Claude Code
- ✅ Este módulo cierra Phase 2 — tienes todas las herramientas para el proyecto final
Próxima cápsula: Mocking Fundamentals — Mock, MagicMock, patch, y la técnica base.
Recursos Adicionales
- unittest.mock Documentation - Referencia oficial de mocking
- pytest-mock - Plugin de pytest para mocking
- pytest Fixtures - Fixtures avanzadas
- Martin Fowler: Mocks Aren't Stubs - Diferencias conceptuales
- Factory Boy - Factory patterns para testing
Módulo 6 — Testing with Claude Code Guide De dependencias externas a tests deterministas