Azure Devops y cobertura de pruebas unitarias (NetCore)

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:

  1. 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.