🎯 Objetivos y Scope
Objetivo: Establecer estándares claros y medibles para pruebas unitarias que garanticen calidad, mantenibilidad y cobertura en todos los proyectos .NET del equipo.
📊 Métricas de Calidad Obligatorias
Section titled “📊 Métricas de Calidad Obligatorias”Cobertura de Código
Section titled “Cobertura de Código”| Métrica | Mínimo Requerido | Objetivo | Aplicación |
|---|---|---|---|
| 📈 Cobertura de Líneas | ≥ 90% | ≥ 95% | Nuevos proyectos |
| 🌳 Cobertura de Branches | ≥ 85% | ≥ 90% | Nuevos proyectos |
| 📋 Cobertura de Métodos | ≥ 85% | ≥ 90% | Proyectos críticos |
Performance y Estabilidad
Section titled “Performance y Estabilidad”| Métrica | Estándar | Medición |
|---|---|---|
| ⚡ Tiempo de Ejecución | < 5 segundos | Suite completa por proyecto |
| 🔄 Estabilidad | 0% flaky tests | 10 ejecuciones consecutivas |
| 📦 Paralelización | Habilitada | Tests independientes |
Compatibilidad Multi-Framework
Section titled “Compatibilidad Multi-Framework”| Framework | Soporte | Prioridad |
|---|---|---|
| 🎯 .NET 8.0 | Obligatorio | Alta |
| 🏛️ .NET Framework 4.8 | Opcional | Baja (legacy) |
🛠️ Stack Tecnológico Estándar
Section titled “🛠️ Stack Tecnológico Estándar”Framework de Testing Principal
Section titled “Framework de Testing Principal”<!-- Configuración base obligatoria --><PackageReference Include="xunit" Version="2.9.3" /><PackageReference Include="xunit.runner.visualstudio" Version="3.1.1" /><PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />¿Por qué xUnit?
- ✅ Performance superior vs MSTest/NUnit
- ✅ Paralelización nativa out-of-the-box
- ✅ Theory support robusto para data-driven tests
- ✅ Ecosystem maduro con extensiones
Mocking y Stubbing
Section titled “Mocking y Stubbing”<PackageReference Include="Moq" Version="4.20.72" /><PackageReference Include="Moq.Dapper" Version="1.0.3" Condition="'$(UseDapper)' == 'true'" />Patrones de mocking soportados:
- Traditional mocking con
Mock<T> - Fluent mocking con
Mock.Of<T> - Dapper integration para repositorios
- Callback verification para comportamiento complejo
Análisis de Cobertura
Section titled “Análisis de Cobertura”<PackageReference Include="coverlet.msbuild" Version="6.0.4"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets></PackageReference>Herramientas complementarias:
- ReportGenerator para reportes HTML visuales
- Azure DevOps integration para CI/CD
- History tracking para tendencias de cobertura
🎯 Alcance de Testing
Section titled “🎯 Alcance de Testing”✅ Incluido en esta Metodología
Section titled “✅ Incluido en esta Metodología”Business Logic (Services)
Section titled “Business Logic (Services)”- Validación de parámetros de entrada
- Lógica de negocio compleja
- Manejo de errores y excepciones
- Integración entre servicios
- Ejemplo:
CacheService,UserService,PaymentService
Data Access (Repositories)
Section titled “Data Access (Repositories)”- CRUD operations con validación
- Query building y parámetros
- Connection handling y error recovery
- Transaction management
- Ejemplo: Repositories con Dapper, Entity Framework
API Layer (Controllers)
Section titled “API Layer (Controllers)”- Request/response mapping
- Model validation
- HTTP status codes correctos
- Authorization y authentication
- Ejemplo: ASP.NET Core controllers, Web API
Utilities y Helpers
Section titled “Utilities y Helpers”- Extension methods
- Data transformation
- Validation helpers
- Format utilities
- Ejemplo:
StringHelper,DateUtils,ValidationExtensions
Async/Await Patterns
Section titled “Async/Await Patterns”- Task-based operations
- CancellationToken handling
- Exception propagation
- Deadlock prevention
- Ejemplo: Async repository operations, HTTP clients
❌ Excluido (Otras Metodologías)
Section titled “❌ Excluido (Otras Metodologías)”Integration Testing
Section titled “Integration Testing”- Database integration completa
- External service calls reales
- Full pipeline end-to-end
- Metodología separada: Testing de Integración
UI/Frontend Testing
Section titled “UI/Frontend Testing”- Browser automation
- JavaScript unit tests
- Component testing (Vue.js)
- Metodología separada: Testing Frontend
Performance Testing
Section titled “Performance Testing”- Load testing
- Stress testing
- Memory profiling
- Metodología separada: Testing de Performance
Manual Testing
Section titled “Manual Testing”- User acceptance testing
- Exploratory testing
- Usability testing
- Metodología separada: QA Manual
🎖️ Niveles de Cumplimiento
Section titled “🎖️ Niveles de Cumplimiento”🥉 Nivel Básico (Mínimo Viable)
Section titled “🥉 Nivel Básico (Mínimo Viable)”- Cobertura: 80% líneas, 75% branches
- Framework: Solo .NET 8.0
- Aplicación: Prototipos, POCs
🥈 Nivel Estándar (Producción)
Section titled “🥈 Nivel Estándar (Producción)”- Cobertura: 90% líneas, 85% branches
- Framework: .NET 8.0 + .NET Framework 4.8
- Aplicación: Aplicaciones de producción
🥇 Nivel Premium (Crítico)
Section titled “🥇 Nivel Premium (Crítico)”- Cobertura: 95% líneas, 90% branches
- Framework: Multi-targeting completo
- Aplicación: Sistemas críticos, APIs core
🔄 Criterios de Éxito
Section titled “🔄 Criterios de Éxito”A Corto Plazo
Section titled “A Corto Plazo”- 100% de nuevos proyectos cumplen nivel estándar
- Scripts automatizados funcionando en todos los equipos
- CI/CD integration con quality gates activos
- Team onboarding < 1 semana para nuevos desarrolladores
A Mediano Plazo
Section titled “A Mediano Plazo”- Coverage trends monitoreados y reportados
- Performance baseline establecido y mantenido
- False positive rate < 5% en todas las suites
A Largo Plazo
Section titled “A Largo Plazo”- Nivel premium en sistemas críticos
- Automated refactoring basado en coverage gaps
- Mutation testing implementado en proyectos core
- Quality culture establecida en todo el equipo
🎯 Casos de Uso Específicos
Section titled “🎯 Casos de Uso Específicos”Proyecto Nuevo (.NET 8.0)
Section titled “Proyecto Nuevo (.NET 8.0)”- Inicio: Aplicar nivel estándar desde día 1
- Templates: Usar scaffolding automatizado
- CI/CD: Quality gates estrictos habilitados
Migration Legacy (.NET Framework → .NET 8.0)
Section titled “Migration Legacy (.NET Framework → .NET 8.0)”- Fase 1: Alcanzar nivel básico en Framework 4.8
- Fase 2: Multi-targeting durante migración
- Fase 3: Nivel estándar en .NET 8.0 puro
Proyecto Crítico (APIs Core)
Section titled “Proyecto Crítico (APIs Core)”- Requisito: Nivel premium obligatorio
- Monitoring: Coverage tracking en tiempo real
- Alerts: Notificaciones automáticas si baja quality
Microservices
Section titled “Microservices”- Strategy: Testing per-service independiente
- Shared: Utilities testing en packages compartidos
- Integration: Contract testing entre servicios
📋 Quick Reference
Section titled “📋 Quick Reference”Comandos Esenciales
Section titled “Comandos Esenciales”# Verificar cumplimiento básicodotnet test --filter FullyQualifiedName!~IntegrationTest /p:CollectCoverage=true
# Ejecutar con umbrales estrictosdotnet test /p:Threshold=90 /p:ThresholdType=lineMétricas Clave
Section titled “Métricas Clave”- 90% líneas mínimo
- 85% branches mínimo
- 0% tests flaky
Red Flags
Section titled “Red Flags”- Coverage bajando sprint a sprint
- Builds fallando por quality gates
- Desarrolladores saltándose tests
🚀 Siguiente Paso
Section titled “🚀 Siguiente Paso”Una vez claros los objetivos y scope, continuamos con:
➡️ Proceso Paso a Paso - Implementación práctica de la metodología