No artigo anterior aprendemos como organizar nosso teste, como definir um bom nome para ele utilizando a técnica GIven-When-Then e fizemos o nosso primeiro método. Porém nossa classe não está totalmente testada! Existe uma métrica chamada de “cobertura de testes”. Ela nos diz quantos por cento do nosso sistema está testado. Lembre-se de que o método Sum possui uma condição! Caso um dos parâmetros de entrada seja menor que zero e o método de teste não validou este cenário. Usamos somente números acima de zero!

Obs: lembrando que você pode encontrar neste link o projeto usado como base pro artigo.

O fluxograma abaixo ilustra o funcionamento do método que estamos testando:

O fluxograma abaixo ilustra o funcionamento do método que estamos testando

Um relatório facilitaria visualizar a cobertura de testes e, para a nossa sorte, isso já existe! O pacote coverlet.collector é adicionado por padrão ao se criar um projeto de teste com o MSTest ou xUnit. O Coverlet é uma biblioteca com o objetivo de medir a cobertura de código em projetos .NET.
O primeiro passo é abrir seu terminal favorito e navegar até o diretório do projeto de teste. Então execute o comando abaixo.

dotnet test --collect:"XPlat Code Coverage"

Ele vai criar uma pasta chamada TestResults e dentro dela uma pasta com um nome aleatório. E nessa pasta um arquivo no formato XML chamado coverage.cobertura.xml contendo os indicadores de cobertura.

Arquivo XML com dados de cobertura de teste

Obs: cada vez que você executar o comando, uma nova pasta com um novo arquivo será gerado.
Agora precisamos instalar a ferramenta de linha de comando ReportGenerator através deste comando:

dotnet tool install --global dotnet-reportgenerator-globaltool

Esta ferramenta usará como base o arquivo XML que geramos para criar o relatório. Navegue até o diretório onde ele foi criado e execute o comando:

reportgenerator -reports:"coverage.cobertura.xml" -targetdir:"coveragereport" -reporttypes:HTML

Como resultado teremos a geração do diretório coveragereport contendo um site estático.

Arquivos gerados para visualização do relatório em HTML

Acessando o arquivo index.html aparecerá um sumário com a cobertura de testes. E podemos perceber que no card branch coverage está indicando que temos 50% de cobertura.

Visualização do relatório e suas métricas

Mais abaixo temos uma lista das classes que estão disponíveis no projeto que está sendo testado e o indicador individual da cobertura de teste. Ao clicar na classe Calculator você terá esta visão:

Visualização dos detalhes de um arquivo no relatório

Repare que temos algumas cores indicativas em cada linha:
Verde: indica que nosso teste testou aquela linha.
Amarelo: exibido em condicionais (como if ou swicth) e indicam que não testamos todas as possibilidades possíveis.
Vermelho: nenhum teste está validando aquela linha.
Cinza: não é testável.

Você pode encontrar mais detalhes do ReportGenerator e todas as suas opções através deste link. Agora que aprendemos a identificar a nossa cobertura de testes, na continuação deste artigo vamos testar as partes restantes da nossa classe.