Testes unitários: Cobertura de testes (parte 2)

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.


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.

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:


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:


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.

Compartilhe este post: