Colorindo seu código para garantir qualidade instantânea com EclEmma
Autor: Renan Reis | Publicado: 2012-08-12T23:05:00-03:00

O TDD nos ajuda a desenvolver código coeso e influencia no design do nosso código, o tornando melhor, além de obviamente garantir testes de nossas funcionalidades.



Podemos também utilizar ferramentas de métricas e cobertura de código para garantir a qualidade de nosso projeto. Como por exemplo o Cobertura, uma ferramenta que mede o percentual de linhas cobertas por testes em nosso código.



Durante a fase de testes e desenvolvimento podemos querer saber de forma prática oque nossos testes estão cobrindo e onde esquecemos de testar, especialmente quando estamos trabalhando com código legado. Seria excelente se ao rodarmos um teste, a IDE já nos fornecesse essa informação.



Felizmente existem plugins que conseguem fazer este trabalho. Dentre eles o eCobertura e o EclEmma.



Vou demonstrar o uso do EclEmma através de um exemplo trivial.



O primeiro passo é instalar o plugin no Eclipse, para isso vá ao Marketplace do Eclipse (Help &gt; Marketplace...), busque por&nbsp;eclemma e clique em install. A partir daí é só realizar os passos de uma instalação de plugin normalmente.



Agora vamos escrever um simples código para entender o funcionamento.



Vamos escrever testes para a classe legada Calculadora, esta&nbsp;possui um método chamado calcula, que dado um valor e um boolean decide se soma mais 10 ao valor.



Se o valor for maior que 100 ou o boolean passado seja true, então soma-se 10 ao valor, caso contrário não faz nada.



public class Calculadora {

 public double calcula(double valor, boolean aplicaTaxas) {
  double valorCalculado = valor;
  
  if(valor &gt; 100 || aplicaTaxas) {
   valorCalculado += 10;
  }
  
  return valorCalculado;
 }
 
}




Vamos escrever nosso primeiro teste:


 @Test
 public void naoDeveCalcularPoisValorEMenorQue100ENaoAplicaTaxas() {
  Calculadora calc = new Calculadora();
  
  double valorCalculado = calc.calcula(80, false);
  
  assertTrue(valorCalculado == 80);
 }




Para rodar o teste com o plugin clique com o direito sobre o arquivo de testes ou em seu código e vá a opção Coverage as... JUnit Test, pelo atalho Alt + Shift + E e T.



Navegue até a classe calculadora e veja como nosso código ficou colorido:









Repare que as linhas cobertas pelo teste ficaram verdes, com exceção da linha 7, que está amarela e da linha 8, que está vermelha.



Isso significa que a linha 7 não foi totalmente testada, ou seja, depois de rodar o teste, todas suas condições não foram realizadas (passe o mouse sobre o losango para ver a dica).



Vamos criar mais um teste para entrarmos na condicional. Agora passando o valor como 110 e aplicaTaxas como false:


 @Test
 public void deveCalcularPoisValorEMaiorQue100() {
  Calculadora calc = new Calculadora();
  
  double valorCalculado = calc.calcula(110, false);
  
  assertTrue(valorCalculado == 120);
 }




Vamos ao resultado:









Note que a linha 8, que antes era vermelha, agora está verde, conseguimos criar um teste que cobre este caso. Porém a linha 7 ainda está amarela (passando o mouse sobre o losango vemos que falta apenas uma condicional não coberta).



Vamos à um ultimo teste que simula o cenário ainda não coberto: Passar o parâmetro aplicaTaxas como true.


 @Test
 public void deveCalcularPoisAplicaTaxas() {
  Calculadora calc = new Calculadora();
  
  double valorCalculado = calc.calcula(20, true);
  
  assertTrue(valorCalculado == 30);
 }






Pronto, nossa lógica foi completamente testada.









Um excelente exercício que fiz foi desenvolver essa mesma classe usando TDD. Conforme você desenvolve o teste e codifica a implementação, já tem automaticamente 100% de cobertura. Porém se tivesse tomado essa abordagem não conseguiria mostrar como a ferramenta ajuda colorindo as linhas não testadas.