Páginas

terça-feira, 10 de setembro de 2013

Cobertura de Testes com EclEmma

No nosso artigo anterior falamos sobre Criação de Testes Unitários com JUnit e após seres desenvolvidos todos os teste unitários para a aplicação, nos resta uma dúvida: Será que nossos testes possuem 100% de cobertura?
Existem diversas ferramentas que ajudam nesta tarefa, fazendo a análise da cobertura de testes de um projeto Java e gerando um relatório. Pesquisando sobre essas ferramentas encontrei o EclEmma, um plugin gratuito de cobertura de código Java para Eclipse. Ele traz a análise de cobertura de código diretamente na bancada Eclipse e permite saber quantos por cento (%) de nossos testes de fato estão cobertos...

Para instalar o EclEmma no Eclipe basta ir no Eclipse Marketplace e procurá-lo.

Figura 1. Caminho Eclipse Marketplace

Figura 2. Procurando o plugin EclEmma no Eclipse Marketplace


Após instalar o EclEmma, o Eclipe deverá ser reiniciado, para isto basta confirmar a caixa de diálogo.

Figura 3. Caixa de diálogo para restartar o Eclipse


Após a instalação do plugin e o restart do Eclipse a única diferença que você vai perceber na sua IDE é que teremos um novo botão para rodar os testes com Coverage, ou seja, “execute o testes com o plugin para ter o relatório da cobertura”, seria algo mais ou menos assim que o botão abaixo faz.

Figura 4.  Botão Coverage

Agora que já temos o EclEmma instalado devidamente, vamos colocar a mão na massa.
Criei um programinha super básico: o usuário informa um número de 1 a 7 e então o programa exibe o nome do dia da semana correspondente, caso o usuário informe um número fora deste intervalo o programa exibe uma mensagem de erro.
Iniciamos escrevendo a classe DiaSemana, nela está contido o método nomeDia no qual vamos testar.

 Figura 5. Implementação Classe DiaSemana


Implementei uma classe denominada Main, para que o nosso programa funcione corretamente

 Figura 6. Implementação Classe Main


Por fim, nossa classe de teste. Iniciei com um único teste, garantindo que o método nomeDia estivesse funcionando perfeitamente. 
Após rodar o JUnit percebemos pela barra verde que tudo está funcionando.


 Figura 7. Implementação Classe DiaSemanaTest e resultado do JUnit


Com apenas este teste que fizemos será que conseguimos cobrir todas as linhas de código da nossa classe DiaSemana? Essa é a hora de descobrir. Para rodar os testes com o EclEmma basta clicarmos com o botão direito em cima do pacote de teste, ir em Coverage As → JUnit Test. Ou simplesmente clicar no botão Coverage que já foi mencionado no inicio do tutorial.



 Figura 8. Caminho para rodar os teste com EclEmma 

Se formos na classe DiaSemana percebemos que nem todas as linhas foram cobertas pelo teste. O plugin EclEmma colori as linhas para facilitar a visualização da cobertura do código, assim podemos saber de forma prática o que nossos testes estão cobrindo e onde nos esquecemos de testar. 
As linhas cobertas pelos testes ficam verdes, aquelas em que os testes não cobriram ficam vermelhas e as parcialmente cobertas adquirem a cor amarela. Nesta ultima situação, geralmente as linhas possuem laços condicionais, if ou while, por exemplo. Significa que depois de rodar o teste, todas suas condições não foram realizadas.

 Figura 9. Cobertura de código da classe DiaSemana


Vamos começar pelas linhas em vermelho, temos que implementar um teste para que está linha seja coberta. Precisamos então realizar um teste que simule uma entrada inválida. 

 Figura 10. Implementação do segundo teste


Se rodarmos o EclEmma novamente vamos perceber que as linhas que estavam em vermelho agora já estão verdes, isso significa que nosso método de teste atingiu o que esperávamos. Agora e a linha em amarelo? Neste trecho do código temos um if e nem todas as suas condições foram testadas. No teste feito anteriormente atribuímos o valor 0 a variável dia, isto satisfaz a expressão "dia < 1", mas e a expressão "dia > DIAS_NA_SEMANA" ? Este trecho do código não foi testado, por isso a coloração amarela. Devemos então criar um novo teste que satisfaça essa condição.


Figura 11. Nova cobertura de código da classe DiaSemana









 Figura 12. Implementação do terceiro teste



Pronto! Agora nossa classe está totalmente coberta.

 Figura 13. Cobertura final de código da classe DiaSemana

Na aba Coverage é apresentado a porcentagem de linhas cobertas, o número de linhas (instruções / código) cobertas, o número de linhas que não foram cobertas pelos teste e por ultimo o total de linhas de código.

Figura 14. Porcentagem da cobertura de código


No site oficial do EclEmma há todas informações sobre o plugin, alguns tutoriais básicos e com imagens ilustrativas. Enfim, não tem erro para começar a usar.
Espero que tenham gostado de mais este tutorial. Até o próximo..

Nenhum comentário:

Postar um comentário