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 > Marketplace...), busque por 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 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 > 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.
Nenhum comentário:
Postar um comentário