DEV Community

Cover image for Transforme seus testes de .NET em um painel visual com Coverlet + GitHub Actions
Guilherme
Guilherme

Posted on

Transforme seus testes de .NET em um painel visual com Coverlet + GitHub Actions

Precisava, rápido, de um relatório de cobertura de testes para um projeto meu.

Um projeto simples feito em .NET, com alguns testes unitários, e que, a cada pull request na branch main, fosse gerado um relatório de forma que eu pudesse divulgar entre minha equipe (no caso eu mesmo e meus pensamentos).

Um detalhe importante: meu repositório no GitHub é privado, e se eu quiser usar o GitHub Pages, preciso torná-lo público, o que está fora de questão.


Por que usar o Coverlet?

Vamos gerar o relatório de cobertura de testes com o Coverlet, porque:

  • Funciona com os principais frameworks de teste: xUnit, NUnit e MSTest
  • É open source, leve e amplamente adotado pela comunidade .NET

🔗 https://github.com/coverlet-coverage/coverlet

E para transformar os dados brutos de cobertura em relatórios legíveis:

Por que usar o ReportGenerator?

  • Converte os arquivos de cobertura (como o coverage.xml gerado pelo Coverlet) em relatórios HTML interativos e fáceis de visualizar
  • É leve, rápido e gratuito

Criando um workflow no GitHub Actions

name: Code Coverage

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repo
        uses: actions/checkout@v3

      - name: Setup .NET
        uses: actions/setup-dotnet@v4
        with:
          dotnet-version: '9.0.x'

      - name: Restore dependencies
        run: dotnet restore

      - name: Run tests with coverage
        run: |
          dotnet test ./tests/MeuProjetoDe.Tests/Domain.Tests.csproj \
            --collect:"XPlat Code Coverage"

      - name: Install ReportGenerator
        run: dotnet tool install --global dotnet-reportgenerator-globaltool

      - name: Generate HTML report
        run: |
          reportgenerator \
            -reports:"**/coverage.cobertura.xml" \
            -targetdir:"coveragereport" \
            -reporttypes:Html

      - name: Upload coverage report artifact
        uses: actions/upload-artifact@v4
        with:
          name: coverage-report
          path: coveragereport
Enter fullscreen mode Exit fullscreen mode

Esse workflow vai:

  • Configurar o ambiente .NET
  • Restaurar dependências
  • Executar os testes com o --collect:"XPlat Code Coverage", que ativa o data collector do Coverlet
  • Instalar o ReportGenerator
  • Gerar o relatório HTML
  • Fazer upload do resultado como artefato

Depois de rodar o workflow, o relatório já estará disponível nos artefatos:

Relatório


Como publicar o relatório no GitHub Pages

Como meu repositório original é privado e pretendo mantê-lo assim, criei um segundo repositório público apenas para servir o relatório via GitHub Pages:

GitHub Pages

1. Criando um token de acesso

Acesse Developer Settings no GitHub e crie um token com as permissões adequadas:

Token

Guarde esse token, pois ele será necessário para a próxima etapa do workflow.


2. Adicionando o deploy no final do workflow

Adicione o trecho abaixo no final do seu workflow para publicar o conteúdo no branch gh-pages do repositório público:

      - name: Deploy coverage report to MeuProjeto.Coverage repo
        run: |
          git config --global user.name "seu nome"
          git config --global user.email "seu email"
          cd coveragereport
          git init
          git checkout -b gh-pages
          git remote add origin https://x-access-token:${{ secrets.COVERAGE_PUBLISH_TOKEN }}@github.com/{seu-usuario}/{repositorio-publico}.git
          git add .
          git commit -m "feat: atualização automática de cobertura"
          git push --force origin gh-pages
Enter fullscreen mode Exit fullscreen mode

3. Criando e adicionando o token no GitHub

Vá em https://github.com/settings/tokens

Crie um token com permissão de escrita no repositório de destino

Copie o token e adicione no repositório privado (Generioc) em
Settings > Secrets and variables > Actions, como:
COVERAGE_PUBLISH_TOKEN

Pronto. O GitHub Actions agora pode fazer o deploy automaticamente no Pages. ✅

Top comments (0)