🧪 Testing a fondo
Pirámide de testing, TDD, unit/integration/E2E, property-based y mutation testing. De cero a estrategia de equipos grandes.
Testing a fondo
Los tests no son un extra: son la red de seguridad del ingeniero. Esta ruta cubre los fundamentos (qué testear, la pirámide, coverage), el TDD real por lenguaje, testing de integración y E2E, y las técnicas avanzadas (property-based, mutation testing, fuzzing) que separan al senior del resto.
La cobertura es un diagnóstico para encontrar zonas sin testear, no una meta numérica. La pirámide dice: muchos unit tests, menos integration, pocos E2E. Y los clásicos (Beck, Fowler, Feathers, Sandi Metz) son eternos: siguen siendo la base después de décadas.
Nivel 0 · Fundamentos
Qué testear y por qué
La teoría que no caduca.
- Test Driven Development: By Example (Kent Beck)📖 LibroENPagoEl libro fundacional del TDD (red-green-refactor) escrito por su creador. Ineludible.La práctica original del TDD.
- Martin Fowler — Software Testing Guide📝 BlogENGratisLa colección definitiva: Test Pyramid, Test Doubles, Mocks Aren't Stubs, Self-Testing Code.El vocabulario del testing profesional.
- The Test Pyramid (Martin Fowler)📝 BlogENGratisEl texto canónico que explica por qué muchos más unit que broad-stack tests.La proporción correcta de tests.
- Test Coverage (Martin Fowler)📝 BlogENGratisDeja claro que la cobertura es una herramienta, no una meta.Usar el coverage con criterio.
- Mocks Aren't Stubs (Martin Fowler)📝 BlogENGratisLa distinción esencial entre test doubles, mocks y stubs.Verificación de comportamiento vs estado.
- Working Effectively with Legacy Code (Michael Feathers)📖 LibroENPagoEl manual para poner tests bajo código heredado sin tests. Indispensable en empresas grandes.Rescatar código legacy con tests.
- xUnit Test Patterns (Gerard Meszaros)📖 LibroENPagoLa enciclopedia de patrones de testing que da vocabulario común a los equipos.El diccionario de los test doubles.
- Is TDD Dead? (Beck, Fowler, DHH)🎬 VideoENGratisEl debate histórico sobre cuándo TDD funciona y cuándo no. Para tener criterio.Los límites reales del TDD.
Nivel 1 · TDD y unit testing por lenguaje
Unit testing en Python, Go, TypeScript y PHP
La práctica diaria.
- pytest Documentation📘 DocsENGratisFixtures, parametrize, monkeypatch, plugins. La referencia definitiva del testing en Python.Testing Python profesional.
- Go testing package📘 DocsENGratisTests, benchmarks, examples, subtests y fuzzing con go test.Testing Go de la fuente.
- Vitest Documentation📘 DocsENGratisEl runner moderno de TS/Vite, con docs traducidas al chino.Unit testing TypeScript moderno.
- Testing JavaScript (Kent C. Dodds)🎓 CursoENPago8 módulos densos: fundamentos, mocking, Testing Library, Cypress, backends Node. El «testing trophy».La metodología completa de testing JS.
- PHPUnit📘 DocsENGratisEl framework de testing de facto de PHP (v13 estable).Unit testing PHP.
- Pest📘 DocsENGratisAPI expresiva sobre PHPUnit con browser testing, mutation y arch testing integrados.PHP moderno y elegante para tests.
- 99 Bottles of OOP (Sandi Metz)📖 LibroENPagoWorkbook de refactoring + TDD guiado paso a paso en Python, JS, PHP y Ruby. Práctica deliberada de élite.El mejor ejercicio deliberado de TDD.
- Growing Object-Oriented Software Guided by Tests (GOOS)📖 LibroENPagoTDD a escala de sistema completo: tests de aceptación, mocks y diseño impulsado por tests.TDD en proyectos grandes.
Nivel 2 · Integration, E2E y testing de APIs/frontend
De los tests unit a los sistemas
La segunda línea de defensa.
- Playwright Documentation📘 DocsENGratisEl estándar E2E moderno: auto-wait, locators resilientes, trace viewer, 3 navegadores, multi-lenguaje.E2E de nivel profesional.
- Cypress Docs + Learn🎓 CursoENGratisCursos oficiales gratuitos de E2E y component testing con app real de ejemplo.E2E con la mejor DX.
- Testing Library📘 DocsENGratisLa filosofía «testea como usa el usuario»: queries accesibles, sin implementation details.Tests frontend que no se rompen por nada.
- The Practical Test Pyramid (Ham Vocke)📝 BlogENGratisGuía práctica para implementar la pirámide con ejemplos reales en cada nivel.La pirámide llevada a la práctica.
- Testcontainers📘 DocsENGratisContenedores desechables para integration tests con dependencias reales (DB, brokers, browsers).Integration tests con dependencias reales.
- Pact — Contract testing📘 DocsENGratisContract testing entre microservicios para detectar drift de contratos sin E2E frágiles.Testing de microservicios de verdad.
- Cucumber / BDD📘 DocsENGratisBDD en lenguaje plano (Gherkin) para tests de aceptación legibles por todo el equipo.Tests legibles por negocio.
- Testing Strategies in a Microservice Architecture (Fowler)📝 BlogENGratisCómo repensar el testing cuando hay muchos servicios desplegables.Estrategia de testing distribuida.
Nivel 3 · Avanzado — property-based, mutation y fuzzing
Técnicas de élite
Donde los tests cazan lo que nadie espera.
- Hypothesis (Python)📘 DocsENGratisLa librería de property-based testing de referencia para Python: genera casos y minimiza fallos.Tests de propiedades en Python.
- fast-check (JS/TS)📘 DocsENGratisProperty-based testing agnóstico de test runner para JS/TS; encuentra edge cases y race conditions.Property-based testing en JS.
- Stryker — Mutation testing📘 DocsENGratisMide la calidad real de tus tests matando mutantes.¿Tus tests matan mutantes o se dejan matar?
- Go native Fuzzing📘 DocsENGratisFuzzing de primera clase en Go con seeds y cobertura guiada, integrado en testing.Fuzzing sin herramientas externas.
- Eradicating Non-Determinism in Tests (Fowler)📝 BlogENGratisCómo diagnosticar y curar tests flaky en sistemas concurrentes/distribuidos.Mata los tests flaky de una vez.
- Jepsen🧪 LabENGratisFault injection y análisis de consistencia en bases de datos distribuidas. La referencia en testing distribuido.Testing de sistemas distribuidos reales.
Recursos en chino, japonés y multilingües
El testing en cada región.
- Vitest 简体中文 docs📘 DocsZHGratisDocumentación oficial de Vitest traducida al chino.Vitest en chino.
- Jest docs (multi-idioma)📘 DocsZHGratisDocs de Jest traducidas a chino, japonés, español, francés y ruso.Jest en tu idioma.
- Qiita — #テスト💬 ComunidadJAGratisLa comunidad japonesa con artículos de calidad sobre testing por lenguaje.Testing en japonés.
- Zenn — Testing/TDD💬 ComunidadJAGratisArtículos y libros técnicos japoneses de testing y TDD.TDD en japonés.
- Grafikart — Tests (PHP/JS)🎬 VideoFRMixtoCursos franceses de PHPUnit y testing JS.Testing en francés.
Haz el ejercicio «99 Bottles» completo (refactoring + TDD guiado). Luego escribe tests unit de uno de tus proyectos reales en pytest/Vitest/Go testing. Después añade integration tests con Testcontainers y un Playwright E2E. Finalmente, prueba Stryker en un módulo pequeño y property-based con Hypothesis.