desenvolvimento, java, tests

Integrando Testes de JUnit ao Projeto

Adicione a biblioteca do JUnit4 no classpath do projeto.

Crie uma pasta de fontes paralela a src chamada test.

Crie na raíz de test a suite de testes, que irá executar todos os test-cases de uma vez (definidos em @SuiteClasses).

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(value = Suite.class)
@SuiteClasses(value = { CLASSE_1.class, CLASSE_2.class, CLASSE_3.class })
public class AllTests {
}

Para cada classe de src, crie uma classe em test com a mesma estrutura de pacotes e o mesmo nome adicionando o sufixo Test.

Para cada classe de teste, adicione os métodos de asserção e a annotation de testes entre a definição do pacote e o início da classe:

import static org.junit.Assert.*;
import org.junit.Test;

Todo teste deve ter a annotation @Test para que ele seja executado automaticamente. Métodos sem essa annotation são considerados utilitários dos testes, e não serão testados automaticamente no junit4:

@Test
public void myTest() {
    assertTrue("Teste deve garantir verdadeiro", true);
}

Se o método chegar até o fim da última instrução, ele passa. Usando os métodos de asserções pode-se checar igualdades, confirmar estados positivos, negativos, nulos, etc…

Pode-se validar se um método de teste lança uma exceção:

@Test(expected = IndexOutOfBoundsException.class)
public void myTest() {
    throw new IndexOutOfBoundsException();
}

E definir o tempo limite para que o método de teste finalize:

@Test(timeout=100)
public void myTest() {
    while(true) {}
}

Opcionalmente pode-se adicionar métodos que serão executados automaticamente de acordo com a seguinte regra:

BeforeClass será executado automaticamente uma vez antes de começar os testes da classe corrente. Deve ser estático.

Before será executado automaticamente antes de cada teste da classe corrente.

After será executado automaticamente após cada teste da classe corrente.

AfterClass será executado automaticamente uma vez após finalizar os testes da classe corrente. Deve ser estático.

@BeforeClass
public static void beforeClass() {
}

@AfterClass
public static void afterClass() {
}

@Before
public void before() {
}

@After
public void after() {
}

Para executar testes via linha de comando, adicione no classpath o caminho para o jar do JUnit, o caminho onde estão suas classes compiladas e opcionalmente o caminho das jars de dependências:

export CLASSPATH=PATH_JUNIT_JAR:PATH_CLASSES:PATH_DEPENDENCIAS

A seguir execute a suite de testes:

java org.junit.runner.JUnitCore AllTests

Execute AllTests para testes de regressão ou cada classe de testes separada durante a construção dos testes.

IMPORTANTE: Perceba que ao ter criado uma pasta de fontes (source folder) e abaixo dela uma estrutura de pacotes idêntica a src, os testes estão logicamente na mesma package dos fontes de produção. Dessa forma eles enxergam métodos protected e podem testá-los sem que seja necessário o uso de reflections, nem misturar fisicamente fontes de produção com fontes de testes e nem ignorar testes em métodos encapsulados.

DICAS:
– procure deixar apenas uma assertion por teste, deixando-o mais coeso (é aceitável repetir o teste com outra assertion)
– procure utilizar os métodos de asserion com mensagem para melhorar a legibilidade dos relatórios

Referências:

http://www.junit.org/
http://thinkabouttests.blogspot.com/2007/12/junit4-suite-de-testes.html
http://code.google.com/p/t2framework/wiki/JUnitQuickTutorial
http://www.mkyong.com/unittest/junit-4-tutorial-5-suite-test/
http://www.jsystemtest.org/?q=node/44
http://improveit.com.br/xp/praticas/tdd

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s