Testes unitários: Cobertura de testes (parte 2)
Testes unitários. Existe uma métrica chamada de “cobertura de testes”. Ela nos diz quantos por cento do nosso sistema está testado.

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!
Veja no fluxograma abaixo. Lembrando que você pode encontrar neste link.

Um relatório facilitaria a identificação da nossa 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. Através da linha de comando, navegue até o diretório do projeto de teste e execute o comando abaixo. Ele irá gerar um arquivo no formato XML contendo os indicadores de cobertura.
dotnet tool install --global dotnet-reportgenerator-globaltoolSerá criado o arquivo coverage.cobertura.xml em uma pasta com o nome identificado por um GUID e localizada dentro do diretório TestResults no projeto de testes.

Agora precisamos instalar a ferramenta de linha de comando ReportGenerator através deste comando:
dotnet tool install --global dotnet-reportgenerator-globaltoolEsta 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:HTMLComo resultado teremos a geração do diretório coveragereport contendo um site estático.

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.

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:

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.








