Testing
Glosario de TDD
Fundamentos
- TDD - Test Driven Development: Test-Driven Development, enfoque de desarrollo donde los tests se escriben antes del código de producción para guiar el diseño y garantizar calidad desde el inicio.
- BDD: Behavior-Driven Development, extensión de TDD - Test Driven Development que usa lenguaje natural y escenarios de negocio para definir tests.
- Red-Green-Refactor Cycle: Ciclo clásico de TDD - Test Driven Development donde primero falla un test (Red), luego se implementa código mínimo para pasar el test (Green) y finalmente se refactoriza el código (Refactor).
- Behavior Specification: Especificación clara de cómo debería comportarse la unidad bajo prueba, base de BDD.
- Incremental Testing: Aplicación de TDD - Test Driven Development de forma progresiva para cada nueva funcionalidad pequeña y verificable.
- Run Tests BDD: Ejecutar tests definidos bajo escenarios de BDD.
Patrones y Estructura
- AAA Pattern (Arrange-Act-Assert): Patrón que estructura los tests en preparación, acción y verificación.
- Given-When-Then: Sintaxis típica de BDD para estructurar escenarios de prueba.
- Naming Patterns: Convenciones para nombrar tests de forma expresiva e intencional.
- Ejemplo:
should_<comportamiento>_when_<condición>().
- Ejemplo:
- Refactor Patterns en TDD: Patrones seguros de reestructuración apoyados por tests para mejorar mantenibilidad.
- Test-Driven Refactoring Patterns: Patrones de refactorización seguros apoyados por tests, como:
- Extract Function
- Replace Conditional with Polymorphism
- Introduce Parameter Object
- Readable Test Structure: Organización clara de
describe,beforeEach,afterEachytestpara legibilidad. - Self-Documenting Tests: Tests que actúan como documentación viva del comportamiento esperado del sistema.
Tipos de Tests
- Unit Test: Pruebas unitarias de funciones o métodos aislados.
- Integration Test: Pruebas de interacción entre módulos o servicios.
- E2E Test: Pruebas End-to-End que simulan flujos completos de usuario.
- Test Suites: Agrupación de tests relacionados para facilitar organización y ejecución.
- Parametrized Assertions: Aserciones ejecutadas con múltiples datos de prueba.
- Parameterized Test Suites: Conjuntos de tests que se ejecutan con diferentes parámetros para maximizar cobertura.
Test Doubles y Mocks
- Test Doubles: Objetos que reemplazan dependencias reales para aislar unidades bajo prueba.
- Dummy: parámetros de relleno sin lógica.
- Stub: retorna datos predefinidos para controlar el flujo.
- Spy: registra interacciones para verificarlas.
- Mock: valida expectativas sobre llamadas y comportamiento.
- Fake: implementación simplificada de dependencias reales.
- Mocking y Stubbing Avanzado: Técnicas para simular dependencias complejas, API externas o eventos de tiempo.
- Mock Verification: Verificación explícita de interacciones con mocks (número de llamadas, parámetros, orden).
Calidad y Métricas
- Test Coverage: Medición de porcentaje de código cubierto por tests.
- Coverage Criteria: Diferentes tipos de cobertura (statement, branch, function, line, path) utilizados para medir calidad de tests.
- Continuous Integration: Integración de TDD - Test Driven Development en pipelines de CI/CD, ejecutando todos los tests en cada push o PR.
- Continuous Quality: Estrategia para mantener alta calidad mediante tests automáticos y métricas.
- Continuous Test Feedback: Integración de resultados de tests en el flujo de trabajo para feedback inmediato a desarrolladores.
Datos y Entorno
- Fixture Setup: Datos o estados comunes configurados antes de cada test para garantizar consistencia.
- Test Isolation: Cada test se ejecuta de forma independiente y sin efectos colaterales.
- Test Data Management: Estrategias para generar, limpiar y reutilizar datos de prueba consistentes.
- Fake Time: Técnica para simular timers, fechas o eventos temporales en tests.
- Dependency Injection en Tests: Permite reemplazar dependencias en tiempo de prueba para un diseño desacoplado.
Buenas Prácticas y Anti-patterns
- Test Readability: Legibilidad de los tests, que comunica intención y propósito.
- Test Maintenance: Práctica de actualizar tests ante cambios de requisitos o refactorización, manteniendo su relevancia.
- Flaky Test Detection: Estrategias para identificar tests inestables o intermitentes.
- Anti-patterns: Patrones de test a evitar:
- Test frágiles
- Overtesting
- God tests
- Copy-paste tests
- Silent tests
- Code Smells en Tests: Señales de tests mal diseñados, como dependencias implícitas o pruebas demasiado largas.
- Anti-Flakiness: Técnicas para evitar tests intermitentes, como espera explícita, mocks y entornos controlados.
Frameworks y Ejemplos
- PHPUnit: Framework de testing para PHP compatible con TDD - Test Driven Development.
- Ejemplos de Tests:
- Login y dashboard
- Casos de uso y tareas
- Flujo TDD completo
¿Te gusta este contenido? Suscríbete vía RSS