- JUNIT: É altamente recomendável que eu utilize essa framework para testar minhas classes?
Veja bem, JUnit é um framework para testes unitários. É altamente recomendável que vc pelo menos tente desenvolver alguns testes unitários usando o framework que vc melhor se adaptar. Existe também o TestNG, JBehave e outras abordagens, JUnit é só o mais popular.
Quer um exemplo: Tente fazer uns testes simples em uma classe sua e rode os testes junto com o EMMA para ver a cobertura de código. Provavelmente os seus testes simples vão exercitar uma parte do seu código e provar que ele funciona como vc espera, e haverá uma parte nebulosa, que pode não funcionar como vc espera. É completamente diferente de vc logar erros, pois logar vc sempre deve
Testes unitários podem mostrar que a sua arquitetura está esquisita demais, como alguns acoplamentos desnecessários, é o preço por começar a desenvolver sem testes. Algumas metodologias pregam que vc deveria criar os testes primeiro e depois criar um código que “passe” em todos (um bom exemplo é o TDD).
Imagine que vc tem um método assim
[code]public class Exemplo{
private RepositorioExemplo repositorio = null;
public Exemplo(){
this.repositorio = new RepositorioExemplo();
}
public Exemplo(RepositorioExemplo repositorio){
this.repositorio = repositorio
}
// Day pode ser um enum, segunda, terça, etc…
public long getTotalByDay(Day day) throws Exception{
if(day == null)
throw new Exception(“Day NULL ?!?!?! WTF???”);
return this.repositorio.anotherGetTotalByCode(day);
}
}
public class MeuRepositorioExemplo {
public long anotherGetTotalByDay(Day day){
// Aqui tenho a lógica de ir no banco de dados
// e fazer as queries malucas
}
}[/code]
Se eu for testar a classe exemplo, eu posso fazer 2 tipos de teste: passando day nulo e não nulo.
Nulo eu devo receber uma exception, não nulo devo receber um long.
Eu posso mockar o repositorio, afinal ele pode ser injetado via construtor, dizendo que , hipoteticamente, se eu chamar anotherGetTotalByDay(segunda) deve retornar 666. Ai eu testo todo o metodo getTotalByDay.
Esta tudo testado? Não… tem a classe Repositorio! Se eu tenho um objeto que TEM outros objetos, eu posso fingir que todos os objetos internos são bem comportados e testar este objeto. Depois eu posso testar se cada objeto é bem comportado. É dificil? Sim, se vc começou fazendo qq outra coisa.