Si ya lograste medir la cobertura de tus pruebas unitarias en .NET, el siguiente paso es transformar esos números de consola en un reporte visual de cobertura que puedas analizar con calma. Aquí aprenderás a generar reportes en formato Cobertura y HTML usando ReportGenerator y la extensión FineCodeCoverage en Visual Studio.
¿Cómo exportar la cobertura a un archivo XML estándar?
El primer paso es decirle a Coverlet que exporte los resultados en un formato que cualquier herramienta pueda leer. El formato Cobertura es el estándar más usado en .NET y en otros lenguajes, y muchos servicios en la nube lo aceptan sin configuración extra.
El comando que usas en la terminal es este:
bash
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
Al ejecutarlo obtienes el resumen habitual: cuántas pruebas pasaron, cuántas fallaron y los porcentajes de cobertura. Pero ahora aparece también un archivo cobertura.xml dentro del proyecto de pruebas [03:20].
¿Qué contiene el archivo cobertura.xml? Tiene el detalle por cada método: líneas cubiertas, branches evaluados y un flag en true o false según si el escenario se cumple. Es la materia prima para cualquier reporte visual.
¿Por qué usar el formato Cobertura y no otro?
Porque es interoperable. Funciona con .NET, con otros frameworks y con plataformas de integración continua. Si más adelante mueves tu pipeline a la nube, no tendrás que regenerar nada.
¿Cómo generar un reporte HTML con ReportGenerator?
El XML es completo, pero leerlo a mano es incómodo. Para eso instalas ReportGenerator desde el gestor de paquetes NuGet buscando “Report G”. Esta librería en realidad es una tool de .NET, así que funciona como herramienta de línea de comandos más que como dependencia del proyecto [05:10].
Una vez instalada, ejecutas el comando con dos parámetros obligatorios y uno opcional:
-reports: la ruta al archivo cobertura.xml generado en el paso anterior.
-targetdir: la carpeta donde quieres guardar el reporte, por ejemplo coverage-report. Si no existe, se crea sola.
-reporttypes: opcional, define el formato de salida. HTML es el más fácil de interpretar.
Al correrlo, aparece una nueva carpeta coverage-report con todos los archivos necesarios. Abres index.html y ya tienes el reporte navegable [07:45].
¿Qué información puedes ver en el reporte HTML?
Puedes navegar por cada clase detectada en las pruebas. En el ejemplo, la clase StringOperations muestra el detalle por método: porcentaje de cobertura, líneas cubiertas y escenarios faltantes.
Un caso concreto: un método aparece con 50 % de cobertura porque solo se prueba el escenario donde se lanza una excepción, pero no el camino feliz donde retorna el string correctamente. Otro método, removeWhiteSpaces, aparece sin cobertura porque ni siquiera está implementado todavía.
¿Qué es un branch en cobertura de código? Es cada camino posible de ejecución dentro de un método, por ejemplo las ramas de un if o un switch. La cobertura de branch mide cuántos de esos caminos fueron ejecutados por tus pruebas.
¿Cómo ver la cobertura sin salir de Visual Studio con FineCodeCoverage?
Si prefieres no abrir el navegador cada vez, puedes instalar la extensión FineCodeCoverage desde el menú de extensiones de Visual Studio. Después de instalarla, cierras y vuelves a abrir el editor para que aparezca [10:30].
La encuentras en View > Other Windows > FineCodeCoverage. Ahí mismo puedes:
- Navegar entre las clases analizadas y ver el detalle de cada prueba.
- Identificar qué clases están cubiertas y cuáles quedaron fuera.
- Acceder a un reporte sin tener que ejecutar comandos manuales.
Un detalle importante: FineCodeCoverage no reutiliza el XML que ya generaste, sino que crea su propio reporte sobre todo el proyecto, sin filtros ni exclusiones por defecto.
¿Cómo configurar FineCodeCoverage para excluir clases?
Vas a Tools > Options y buscas la sección de FineCodeCoverage. Ahí defines qué motor usar (Coverlet, OpenCover o el de Microsoft) y aplicas filtros por directorio o por atributo.
La opción clave es ExcludeByAttribute: indicas el atributo que quieres usar para que ciertas clases o métodos queden fuera del cálculo. Así obtienes un porcentaje más realista, sin contaminar con código generado o utilitarios que no necesitan pruebas.
¿Cuándo usar ReportGenerator y cuándo FineCodeCoverage? Usa ReportGenerator cuando quieras integrar el reporte en un pipeline de CI/CD o compartirlo como HTML. Usa FineCodeCoverage cuando estés desarrollando y necesites feedback inmediato dentro de Visual Studio.
Ahora cuentas con dos caminos complementarios para analizar tu cobertura: uno automatizable y portable, otro integrado al editor. ¿Cuál vas a probar primero en tu próximo proyecto con xUnit? Cuéntame en los comentarios qué métricas te interesa empezar a vigilar.