Skip to content

🎯 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étricaMínimo RequeridoObjetivoAplicació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
MétricaEstándarMedición
⚡ Tiempo de Ejecución< 5 segundosSuite completa por proyecto
🔄 Estabilidad0% flaky tests10 ejecuciones consecutivas
📦 ParalelizaciónHabilitadaTests independientes
FrameworkSoportePrioridad
🎯 .NET 8.0ObligatorioAlta
🏛️ .NET Framework 4.8OpcionalBaja (legacy)

<!-- 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
<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
<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

  • 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
  • CRUD operations con validación
  • Query building y parámetros
  • Connection handling y error recovery
  • Transaction management
  • Ejemplo: Repositories con Dapper, Entity Framework
  • Request/response mapping
  • Model validation
  • HTTP status codes correctos
  • Authorization y authentication
  • Ejemplo: ASP.NET Core controllers, Web API
  • Extension methods
  • Data transformation
  • Validation helpers
  • Format utilities
  • Ejemplo: StringHelper, DateUtils, ValidationExtensions
  • Task-based operations
  • CancellationToken handling
  • Exception propagation
  • Deadlock prevention
  • Ejemplo: Async repository operations, HTTP clients
  • Database integration completa
  • External service calls reales
  • Full pipeline end-to-end
  • Metodología separada: Testing de Integración
  • Browser automation
  • JavaScript unit tests
  • Component testing (Vue.js)
  • Metodología separada: Testing Frontend
  • Load testing
  • Stress testing
  • Memory profiling
  • Metodología separada: Testing de Performance
  • User acceptance testing
  • Exploratory testing
  • Usability testing
  • Metodología separada: QA Manual

  • Cobertura: 80% líneas, 75% branches
  • Framework: Solo .NET 8.0
  • Aplicación: Prototipos, POCs
  • Cobertura: 90% líneas, 85% branches
  • Framework: .NET 8.0 + .NET Framework 4.8
  • Aplicación: Aplicaciones de producción
  • Cobertura: 95% líneas, 90% branches
  • Framework: Multi-targeting completo
  • Aplicación: Sistemas críticos, APIs core

  • 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
  • Coverage trends monitoreados y reportados
  • Performance baseline establecido y mantenido
  • False positive rate < 5% en todas las suites
  • 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

  • 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
  • Requisito: Nivel premium obligatorio
  • Monitoring: Coverage tracking en tiempo real
  • Alerts: Notificaciones automáticas si baja quality
  • Strategy: Testing per-service independiente
  • Shared: Utilities testing en packages compartidos
  • Integration: Contract testing entre servicios

Terminal window
# Verificar cumplimiento básico
dotnet test --filter FullyQualifiedName!~IntegrationTest /p:CollectCoverage=true
# Ejecutar con umbrales estrictos
dotnet test /p:Threshold=90 /p:ThresholdType=line
  • 90% líneas mínimo
  • 85% branches mínimo
  • 0% tests flaky
  • Coverage bajando sprint a sprint
  • Builds fallando por quality gates
  • Desarrolladores saltándose tests

Una vez claros los objetivos y scope, continuamos con:

➡️ Proceso Paso a Paso - Implementación práctica de la metodología