La cobertura de pruebas unitarias cobra mucha importancia ya que nos ayuda a determinar la efectividad de nuestras pruebas y si hemos olvidado algo al crearlas.
En C# podemos usar Coverlet para generar un reporte de la cobertura y leer fácilmente los resultados para detectar esos módulos sin pruebas o que aquellos que necesiten más.
En este paso a paso veremos como incluir la cobertura en Azure devops:
- Agregar una tarea a tu pipeline de netcore para correr las pruebas incluyendo la cobertura en los parámetros. “/p:CollectCoverage=true /p:CoverletOutputFormat=cobertura” representan los parámetros de Coverlet para obtener la cobertura. Debes tener instalado el nuget de Coverlet en tu proyecto. (https://dev.to/mteheran/coverlet-unit-tests-coverage-for-net-4954)
#Ejemplo archivo YAML
steps:
- task: DotNetCoreCLI@2
displayName: 'Test - Coverlet'
inputs:
command: test
projects: '**/*[Tt]est/*.csproj'
arguments: '--configuration $(BuildConfiguration) --no-build /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura'
continueOnError: true
2. Agregar ReportGenerator para que a partir de los resultados de la cobertura generar un reporte. ReportGenerator debe instalarse como una extensión por que no viene por defecto en Azure devops.
#Ejemplo archivo YAML
steps:
- task: Palmmedia.reportgenerator.reportgenerator-build-release-task.reportgenerator@4
displayName: ReportGenerator
inputs:
reports: '**/coverage.cobertura.xml'
targetdir: ' $(build.artifactstagingdirectory)/'
reporttypes: 'HtmlInline_AzurePipelines;Cobertura;Badges'
3. Publica el reporte para poder visualizarlo luego de que todos las tasks del pipeline se ejecuten
#Ejemplo archivo YAML
steps:
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage from $(build.artifactstagingdirectory)/cobertura.xml'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: ' $(build.artifactstagingdirectory)/cobertura.xml'
reportDirectory: ' $(build.artifactstagingdirectory)/'
4. Si todos los pasos funcionan correctamente, ahora puedes visualizar un nuevo tab en el resultado de la ejecución que dice “Code coverage”, en este se presentará el reporte de cobertura.