Nosso colega, Scott Hanselman, continua estudando testes e cobertura de código no .NET Core. Ele já conseguiu falar sobre algumas ferramentas para melhorar a qualidade dos testes e hoje fala sobre mais uma
coisa : o
AltCover . Olhe embaixo do gato!
Passo a palavra para Scott Hanselman .
No início desta semana, revi a colcha . Também há uma ferramenta OpenCover respeitada e vários projetos interessantes que tentam fazer com que o OpenCover funcione com o .NET Core, mas apenas no Windows.
Hoje vou estudar o AltCover Steve Gilham. Existem ferramentas de detecção de cobertura que usam a API de criação de perfil do .NET em tempo de execução. AltCover, por outro lado, refere-se a IL para isso .
Como o nome sugere, essa é uma abordagem alternativa à cobertura. Em vez de trabalhar com a API de criação de perfil do .NET em tempo de execução, ela adiciona a mesma IL extra ao que queremos criar, mesmo antes da execução. Isso significa que ele deve funcionar em quase todos os lugares, em qualquer plataforma, desde que o processo de execução tenha acesso para modificar o arquivo de resultado. Você pode combinar as várias plataformas usadas para instrumentação e as que são testadas.
O AltCover não é apenas parte do pacote NuGet, mas também está disponível como parte da .NET Core Global Tool, o que é ótimo.
dotnet tool install --global altcover.global
Isso permite que você use o comando altcover em qualquer lugar sem adicioná-lo ao projeto.
Ainda assim, vou
ler o guia de configuração rápida do AltCover e ver com que rapidez posso fazê-lo!
Vou instalá-lo no meu projeto de teste hanselminutes.core.tests,
dotnet add package AltCover
e então eu vou lançá-lo.
dotnet test /p:AltCover=true
Ótimo. Meus testes são executados normalmente, mas agora tenho o arquivo test.xml na pasta de teste. Se desejado, eu também poderia gerar relatórios de LCov ou Cobertura. O arquivo de cobertura.xml já pesa quase meio megabyte! Tem muitas informações úteis, mas como posso ver os resultados de forma legível?

O arquivo está no formato XML OpenCover, para que eu possa executar o
ReportGenerator para o arquivo de cobertura e obter um monte de arquivos HTML. De fato, todo um site de minicobertura!
Baixei o ReportGenerator e o coloquei em uma pasta separada (esta é a melhor solução para a .NET Core Global Tool).
c:\ReportGenerator\ReportGenerator.exe -reports:coverage.xml -targetdir:./coverage
Certifique-se de usar o targetDir bom, caso contrário, você receberá dezenas de arquivos HTML desnecessários na pasta do projeto. Também vale a pena considerar a configuração de .gitignoring para a pasta e o arquivo de cobertura resultantes. Abra index.htm e avalie todas essas informações úteis!

Confira os Hotspots de risco acima! Eu tenho um
CustomPageHandler com complexidade NPath significativa e duas visualizações com
complexidade ciclomática significativa.
Avalie também a excelente cobertura da pista, conforme indicado aqui nos resultados do relatório de cobertura. Você pode perceber que o EnableAutoLinks sempre foi verdadeiro, então verifiquei apenas uma maneira. Talvez eu execute um teste negativo aqui e veja se há algum efeito colateral se EnableAutoLinks for falso.
Leia o tutorial completo do AltCover . Existem várias maneiras de executar essa ferramenta, desde ferramentas globais, ferramentas globais, testes dotnet, tarefas do MSBuild até a integração com o PowerShell!
- Para exemplos de uso, clique aqui .
- Para visualizar os modos de operação, clique aqui .
- Para executar o AltCover a partir do teste dotnet, acesse a integração do teste dotnet.
- Para executar o AltCover no MSBuild, clique aqui .
- Para iniciar o AltCover e suas ferramentas relacionadas do Windows PowerShell ou PowerShell Core, clique aqui .
Existem muitos bons exemplos aqui e levei literalmente 10 minutos para obter um excelente relatório de cobertura com o AltCover e o .NET Core. Obrigado ao Steve da AltCover! Visite
github.com/SteveGilham/altcover para obter um asterisco, relatar problemas no arquivo ou oferecer ajuda! E o mais importante, compartilhe projetos de código aberto como este com amigos e colegas.