Olá, gostaria de saber como posso implementar uma rotina de testes com JUnit.
Um abraço, muito obrigado. 
Dúvida em JUnit
3 Respostas
Sua IDE já deve ter os jars dos JUnit
import static org.junit.Assert.assertTrue;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import org.junit.Test;
import webfinanceiro.entidades.Safra;
public class SafraTest {
@Test
public void getMesesAposADataPassandoDataDaSafraATual(){
Safra safra = new Safra();
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, Calendar.OCTOBER);
c.set(Calendar.YEAR, 2005);
List<Integer> meses = safra.getMesesAposAData(c.getTime());
assertTrue("O List de meses está vindo vazio", meses.size() > 0);
assertTrue("Esperado 6, Veio "+ meses.size(), meses.size()==6);
}
@Test
public void getMesesAteADataPassandoDataDaSafraATual(){
Safra safra = new Safra();
Calendar c = Calendar.getInstance();
c.set(Calendar.MONTH, Calendar.OCTOBER);
c.set(Calendar.YEAR, 2005);
List<Integer> meses = safra.getMesesAteAData(c.getTime());
assertTrue("O List de meses está vindo vazio", meses.size() > 0);
assertTrue("Esperado 7, Veio "+ meses.size(), meses.size()==7);
}
}
Bom esse código ainda não foi refatorado, não levem em consideração a lógica…
Basicamente:
-
Crie uma classe qualquer para teste.
-
Crie alguns métodos de teste public, void, não-static e sem parâmetros.
-
Coloque a annotation @Test nos seus métodos de teste (org.junit.Test).
Pronto, você já tem o teste básico funcionando. 
import org.junit.Test;
public class Teste {
@Test
public void meuPrimeiroTeste() {
// Seu teste aqui.
}
@Test
public void meuSegundoTeste() {
// Seu teste aqui.
}
}
Para melhorar:
- Dentro dos métodos de teste use a classe org.junit.Assert para fazer testes que espera-se que nunca falhem. Se falharem a execução é interrompida instantaneamente e o teste falha. Consulte a documentação desta classe para mais detalhes, ela é bem simples.
@Test
public void meuTerceiroTeste() {
Assert.assertEquals(2 + 2, 4); // Verifica se 2+2=4.
}
- Se você espera que algum método lance uma exceção (por exemplo, se você está testando se um método é capaz de validar dados incorretos e lançar uma exceção adequadamente), você pode colocar a propriedade expected na annotation Test.
@Test(expected=NullPointerException.class)
public void meuQuartoTeste() {
ClasseQueEstouTestando.metodoQueNaoAceitaNull(null);
}
- Se você quer verificar se um teste não entra em loop infinito, deadlock ou se demora demais, use a propriedade timeout da annotation Test:
@Test(timeout=50)
public void meuQuintoTeste() {
// ...
}
- Se você precisa que algo seja inicializado antes de CADA teste, crie um método public, void, não-static e sem parâmetros com a annotation @Before. Para métodos que sejam chamados depois de cada teste, use @After. Você pode definir vários métodos com @Before e vários com @After (não esquecer de importá-los do pacote org.junit).
import org.junit.*;
public class TestaArquivo {
@Before
public void abreArquivo() {
// ...
}
@Test
public void testaEscritaNoArquivo() {
// ...
}
@Test
public void testaLeituraNoArquivo() {
// ...
}
@After
public void fechaArquivo() {
// ...
}
}
- Se você precisa que algo seja inicializado no começo de todos os testes, apenas UMA vez, crie um método public, void, STATIC e sem parâmetros com a annotation @BeforeClass. Para um método que seja chamado apenas depois de finalizado todos os testes, use @AfterClass. Você também pode definir vários métodos com @BeforeClass ou @AfterClass.
import org.junit.*;
public class TestaConexao {
@BeforeClass
public static void conecta() {
// ...
}
@Test
public void testaInsert() {
// ...
}
@Test
public void testaUpdate() {
// ...
}
@Test
public void testaDelete() {
// ...
}
@AfterClass
public static void desconecta() {
// ...
}
}
Para você ver: é facinho.
Espero ter ajudado.
É quase um tutorial. Parabéns pela resposta victorwss.
Criado 12 de junho de 2008
Ultima resposta 13 de jun. de 2008
Respostas 3
Participantes 3