Desenvolvimento

23 abr, 2018

Métricas de testes, com XUnit, OpenCover e ReportGenerator

Publicidade

Olá, pessoal!

Quem trabalha com desenvolvimento já passou por vários projetos onde devemos fazer testes unitários e medir a porcentagem de cobertura de código escrita.

Você que está começando, lembre-se que além de fazer um código bem escrito, você deve testá-lo, pois isso garante que seu código saia com muito mais qualidade.

Neste artigo, mostro como obter a porcentagem de cobertura de código, utilizando o OpenCover e ReportGenerator. São extensões gratuitas, que estão disponíveis no NUGET.

Vamos lá.

Primeiro criei uma solution com algumas camadas e adicionei uma camada de testes unitários.

Solução com testes unitários
Tela de criação de projetos

Depois disso, precisamos instalar os pacotes do xUnit, para fazer testes unitários pelo NUGET, no projeto de unit test

PM> install-package xunit

PM> install-package xunit.runner.console

PM> install-package xunit.runner.visualstudio

Agora, vamos criar testes unitários para a funcionalidade de Pessoa.

Na classe PessoaAppService, na camada Application, existe um método que irá verificar se o salário da pessoa é maior que R$ 1000. Caso seja verdadeiro, irá mudar o salário para R$ 500 e caso contrário, mantém o valor.

Classe PessoaAppService

Para esse cenário, existem duas condições a serem testadas.

Criei o método Deve_Manter_Salario na camada de UnitTest para testar uma das duas condições.

Teste de uma das condições da classe PessoaAppService

Para rodar o teste, clique em TestExplorer, que você verá o teste:

Teste para serem executados

Depois rode o teste. Você verá se deu certo ou não desta forma:

Teste executado com sucesso

Com isso, executamos umas das condições da classe PessoaAppService.

Agora precisamos saber qual a porcentagem desse teste em relação a todo meu código. Para isso vamos instalar o OpenCover e o ReportGenerator pelo NUGET.

PM> install-package OpenCover -version 4.6.519

PM> install-package ReportGenerator -version 3.0.2

Para rodar o relatório, existe esse .bat que adicionei a solução:

Relatorio.bat

Em suma, esse .bat, executa o .exe do OpenCover para obter as métricas de cobertura de código e salva em um .xml. Depois disso ele executa .exe do ReportGenerator para gerar um relatório .html com as métricas.

Ao executar o .bat ele abrirá essa tela com as informações:

Relatório de com a porcentagem de cobertura de código

Vejam que com esse relatório podem ver o quanto estamos atingindo os testes em relação ao código.

Neste caso, temos 85.1% de cobertura:

Porcentagem de cobertura de código

Mas como descobrimos o que ainda falta para chegar aos 100%?

Clique em FM.Metricas.Application.PessoaAppService

Ao clicar na classe em específico, o relatório mostra onde o teste passou. Neste caso, o teste Deve_Manter_Salario fez o que deveria fazer: calculou o salário e o mesmo não era maior que R$ 1000.

Agora precisamos fazer o outro teste para que, nessa classe, a cobertura chegue a 100%. O teste será o Deve_Ter_Salario_500. Teste que o salário será R$ 500.

Teste da segunda condição da classe de PessoaAppService

Execute os testes:

Testes excutados com sucesso

Em seguida, rode o Relatório.bat e verifique a porcentagem dos testes

100% de cobertura de testes

Observe onde os testes passaram pela classe:

Bom, essas ferramentas auxiliam e muito na qualidade da entrega do software, fazendo os testes e verificando se todos os testes estão sendo executados por todo código. Ao desenvolvermos testes, com certeza pegaremos várias situações que poderemos melhorar a qualidade do código.

Espero que tenham gostado. Segue a solution desse exemplo no meu GitHub: