Testes unitários: Cobertura de testes
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:
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.
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.
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.