Dúvida em JUnit

3 respostas
Marcio_Nogueira

Olá, gostaria de saber como posso implementar uma rotina de testes com JUnit.
Um abraço, muito obrigado. :wink:

3 Respostas

leofernandesmo

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…

victorwss

Basicamente:

  1. Crie uma classe qualquer para teste.

  2. Crie alguns métodos de teste public, void, não-static e sem parâmetros.

  3. Coloque a annotation @Test nos seus métodos de teste (org.junit.Test).

Pronto, você já tem o teste básico funcionando. :smiley:

import org.junit.Test;

public class Teste {
    @Test
    public void meuPrimeiroTeste() {
        // Seu teste aqui.
    }

    @Test
    public void meuSegundoTeste() {
        // Seu teste aqui.
    }
}

Para melhorar:

  1. 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.
    }
  1. 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);
    }
  1. 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() {
        // ...
    }
  1. 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() {
        // ...
    }
}
  1. 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.

leofernandesmo

É 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