Este repositorio contiene ejemplos completos y didácticos de diferentes tipos de testing en desarrollo de software. Está diseñado como material educativo para aprender testing unitario, de integración y de componentes en múltiples tecnologías.
testing-class/
├── 📁 integration-tests/ # Pruebas de integración en JavaScript/Node.js
├── 📁 java-testing/ # Pruebas unitarias e integración en Java
├── 📁 react-components/ # Testing de componentes React
├── 📁 unit-test/ # Ejemplos básicos de testing unitario en JavaScript
├── 📄 jest.setup.js # Configuración global de Jest
├── 📄 package.json # Dependencias y scripts de Node.js
└── 📄 README.md # Este archivo
- Testing Unitario: Verificar funcionalidad de unidades individuales de código
- Testing de Integración: Probar interacciones entre componentes
- Testing de Componentes: Validar comportamiento de componentes UI
- Mocking y Stubbing: Simular dependencias externas
- TDD/BDD: Metodologías de desarrollo dirigido por pruebas
- Cobertura de Código: Medir y mejorar la cobertura de tests
Tecnologías: JavaScript, Jest
Contenido:
Edad/: Testing de cálculo de edadPassword/: Validación de contraseñasPrecio/: Cálculo de precios con descuentos
Conceptos Cubiertos:
- Estructura básica de tests con Jest
- Assertions fundamentales
- Testing de funciones puras
- Casos edge y validaciones
Tecnologías: JavaScript, Node.js, Jest
Contenido:
services/: Servicios de usuario y posttests/: Pruebas big bang e incrementalesstubs-drivers/: Helpers y utilidades de testingejemplos-claros/: Ejemplos didácticos con CartService y ProductService
Conceptos Cubiertos:
- Testing de APIs y servicios
- Mocking de dependencias externas
- Pruebas big bang vs incrementales
- Testing de bases de datos
- Stubs y drivers de prueba
Tecnologías: React, Jest, React Testing Library
Contenido:
Button.jsx/.test.jsx: Componente de botón con pruebasCharacterCard.jsx/.test.jsx: Componente que consume API de Rick and MortyContactForm.jsx/.test.jsx: Formulario con validaciones- Documentación completa de arquitectura y testing
Conceptos Cubiertos:
- Testing de componentes React
- Simulación de APIs externas
- Testing de interacciones de usuario
- Estados asíncronos y loading
- Accessibility testing
- Custom hooks testing
Tecnologías: Java 11, Spring Boot, JUnit 5, Mockito, AssertJ
Contenido:
src/main/java/: Clases principales (Usuario, UsuarioService, EmailService, Repository)src/test/java/unit/: Pruebas unitarias completassrc/test/java/integration/: Pruebas de integración con Spring Bootpom.xml: Configuración completa de Maven con dependencias de testing
Conceptos Cubiertos:
- Testing unitario con JUnit 5 y Mockito
- Testing de integración con Spring Boot
- Testing de repositorios JPA
- Mocking de servicios externos
- Testing parametrizado
- AssertJ para assertions expresivas
# Instalar dependencias
npm install
# Ejecutar todas las pruebas
npm test
# Ejecutar con cobertura
npm run test:coverage
# Ejecutar en modo watch
npm run test:watch
# Ejecutar pruebas específicas
npm test -- --testPathPattern=unit-test
npm test -- --testPathPattern=integration-tests
npm test -- --testPathPattern=react-components# Navegar al directorio de Java
cd java-testing
# Ejecutar solo pruebas unitarias
mvn test
# Ejecutar solo pruebas de integración
mvn verify
# Ejecutar con cobertura
mvn test jacoco:report
# Ver reporte de cobertura
# Abrir: target/site/jacoco/index.html- Comenzar con
unit-test/para conceptos básicos - Leer documentación en cada carpeta
- Ejecutar pruebas y experimentar modificando código
- Estudiar estructura de cada test (Arrange-Act-Assert)
- Explorar
integration-tests/para conceptos avanzados - Estudiar técnicas de mocking y stubbing
- Comparar enfoques big bang vs incrementales
- Practicar con
react-components/para UI testing
- Profundizar en
java-testing/para enterprise patterns - Estudiar configuración de frameworks de testing
- Implementar propios helpers y utilidades
- Experimentar con diferentes estrategias de testing
- Jest: Framework principal para JavaScript
- JUnit 5: Framework moderno para Java
- React Testing Library: Testing de componentes React
- Jest Mocks: Mocks nativos de Jest
- Mockito: Framework de mocking para Java
- WireMock: Mock de servicios HTTP
- Jest Matchers: Assertions básicas y extendidas
- AssertJ: Assertions fluidas para Java
- @testing-library/jest-dom: Matchers específicos para DOM
- Jest Coverage: Cobertura integrada con Jest
- JaCoCo: Cobertura de código para Java
- Node.js 16+
- npm 7+
- Conocimientos básicos de JavaScript ES6+
- Conocimientos de React Hooks
- Comprensión de componentes funcionales
- Familiaridad con APIs y llamadas asíncronas
- Java 11+
- Maven 3.6+
- Conocimientos básicos de Spring Boot
- Comprensión de inyección de dependencias
- Pirámide de Testing: Unitarias > Integración > E2E
- F.I.R.S.T: Fast, Independent, Repeatable, Self-validating, Timely
- AAA Pattern: Arrange-Act-Assert
- Given-When-Then: BDD style testing
- Test Doubles: Mocks, Stubs, Spies, Fakes
- Parametrized Testing: Múltiples casos con una definición
- Testing Asíncrono: Promises, async/await, timeouts
- Edge Cases: Valores null, límites, casos extremos
- Naming: Nombres descriptivos para tests
- Independence: Tests independientes entre sí
- Maintenance: Código de test mantenible
- Documentation: Tests como documentación viva
Este es un proyecto educativo. Las contribuciones son bienvenidas:
- Fork del repositorio
- Crear rama feature (
git checkout -b feature/nueva-funcionalidad) - Commit cambios (
git commit -am 'Agregar nueva funcionalidad') - Push a la rama (
git push origin feature/nueva-funcionalidad) - Crear Pull Request
Este proyecto es de uso educativo y está disponible bajo licencia MIT.
- Cada carpeta es independiente y puede usarse por separado
- Documentación completa incluida en cada sección
- Ejemplos progresivos de simple a complejo
- Configuración lista para usar
- Código completamente comentado
- Explicaciones de decisiones de diseño
- Múltiples enfoques para comparar
- Ejercicios prácticos incluidos
- Jest Documentation
- React Testing Library
- JUnit 5 User Guide
- Mockito Documentation
- AssertJ Documentation
¿Encontraste algún error o tienes sugerencias? Abre un issue o envía un pull request. ¡Todo feedback es bienvenido para mejorar este material educativo!