Cobertura de código para pruebas unitarias en C# con Coverlet

Ahora que he estado utilizando la versión Community de Visual Studio, una de las características que considero hacen la diferencia respecto a la versión Enterprise es la falta de Cobertura de Código para las Pruebas Unitarias (Code Coverage en inglés) en la versión community. Esta característica permite medir en porcentaje y visualizar con marcado de líneas toda aquellas líneas de código que son tocadas, o no, con nuestras pruebas.

Es aquí donde Coverlet y ReportGenerator entran en juego permitiendo por medio de paquetes Nugets y otras herramientas del dotnet, realizar dicha tarea. Así pues, en esta entrada, veremos como generar los reportes de cobertura utilizando Coverlet. Y posteriormente se mostrara el uso de la herramienta proveída por ReportGenerator para obtener el reporte visual en formato html.

Configurar el proyecto de pruebas

Lo primero que se necesita realizar es agregar al proyecto de pruebas (puede ser tanto MSUnit como Xunit) el paquete nuget:

Install-Package coverlet.msbuild

* Verificar que el proyecto de pruebas también incluya el paquete coverlet.collector

Una vez configurado el proyecto, los siguientes pasos serán realizados en una Consola de Windows (command prompt en inglés). Recomendando utilizar la terminar proveída por Visual Studio.

Preparación del ambiente

Como preparación del ambiente, será necesario instalar la herramienta dotnet-reportgenerator-globaltool. Aún y cuando esta herramienta es provista por medio de los paquetes nugets, esta debe de ser instalada usando la Consola de Windows.

dotnet tool install -g dotnet-reportgenerator-globaltool

*Con este comando, la herramienta se instalará globalmente. Si el desarrollador así lo desea, puede ser instalado localmente en el directorio de la solución.

Ejecutar las pruebas con recolección de cobertura de código

Una vez posicionados en el directorio de la solución, el primer paso a realizar, será llamar el commando para la ejecución de la pruebas. A este comando se le deberá añadir los parámetros necesarios para la recolección de la cobertura y el directorio de salida donde poner estos resultados.

dotnet test /p:CollectCoverage=true
/p:CoverletOutputFormat=cobertura
/p:CoverletOutput="./../TestResults/"

Generar el reporte html

El siguiente paso consistirá en utilizar la herramienta de generación del reporte que instalamos para el dotnet seleccionando el archivo xml generado en el paso anterior y seleccionando que el reporte sea generado en html.

reportgenerator.exe "-reports:TestResults\coverage.cobertura.xml"
"-targetdir:TestResults\html"
"-reporttypes:HTML;"

Una vez realizado esto, se podrá acceder al reporte html, ejecutando el navegador sobre el archivos generado.

Visualizar el reporte

.\TestResults\html\index.htm

Obteniendo un reporte con las clases que las pruebas unitarias están ejecutando, marcando en verde las líneas de código que si son ejecutadas, mientras las que no se ejecutan marcadas de color rojo.

Presentación de Azure DevOps con enfoque en Pruebas Unitarias

En el marco de la “Jornada de Arquitectura .Net” en su edición de “Unit Test Everywhere” los pasados días 19 y 20 de Mayo, tuve el honor de hacer la presentación de “Azure DevOps con enfoque en las ejecución de Pruebas Unitarias”.

En esta presentación tuvimos oportunidad de conocer como se configuran pipelines con la ejecución de pruebas unitarias. Con esto pudimos verificar el resultado de la ejecución de las pruebas en el reporte entregado por Azure DevOps. Además de configurar y visualizar el reporte de cobertura de código. Por último, pudimos aprender como proteger branches para aceptar pull request o commits dependiendo del resultado de la ejecución de las pruebas.

Aquí el video en el canal de YouTube de la comunidad:

Y esos los recursos mencionados en la presentación: