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-globaltool
Será 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-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.
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.