JUnit 4 Test Suites

98

Como faço para criar suítes de teste com JUnit 4?

Toda a documentação que vi não parece estar funcionando para mim. E se eu usar o assistente do Eclipse, ele não me dá a opção de selecionar qualquer uma das classes de teste que criei.

Adam Taylor
fonte
4
Com o Eclipse 3.7 Indigo, o assistente de suíte de teste agora suporta JUnit 4
Fabian Steeg

Respostas:

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

@RunWith(Suite.class)
@Suite.SuiteClasses({TestClass1.class, TestClass2.class})
public class TestSuite {
  //nothing
}
Joachim Sauer
fonte
61

Você pode criar uma suíte como esta. Por exemplo, uma AllTestsuíte seria algo assim.

package my.package.tests;

@RunWith(Suite.class)
@SuiteClasses({
    testMyService.class,
    testMyBackend.class,
    ...
})

public class AllTests {}

Agora você pode executar isso de duas maneiras diferentes:

  1. clique com o botão direito e execute no Eclipse como teste Junit
  2. criar um aplicativo Java executável; Classe principal = 'org.junit.runner.JUnitCore' e Args = 'my.package.tests.AllTests'
  3. execute a partir da linha de comando:

    $ java -cp build/classes/:/usr/share/java/junit4.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore my.package.tests.AllTests
cmcginty
fonte
Iria adicionar ainda mais VoteUps para o CMDLine :)
Gruber
9

Acho que o TestSuite caiu em desgraça. Esse pode ter sido o estilo antes do 4.x, mas não é agora que eu saiba.

Eu apenas anoto os testes que desejo e, em seguida, executo a aula. Todos os testes anotados são executados. Eu posso usar o Ant, mas na maioria das vezes eu faço o IntelliJ rodá-los para mim.

duffymo
fonte
11
Posso estar errado, mas acho que o TestSuite ainda é bom quando precisamos especificar a ordem dos testes, especialmente em testes de integração automatizados onde o teste de cenários menores deve vir antes de cenários mais complexos.
Bertie de
@duffymo Acho seu comentário interessante, pois até agora fui treinado na linha de pensamento pré-4.x sobre a organização de casos de teste em conjuntos de teste
Vatsala
6
Se você tiver um número maior de testes, diferentes áreas / módulos funcionais, uma distinção entre testes não essenciais 'principais' e auxiliares / mais lentos / caros - por qualquer uma dessas razões - você estruturaria os testes em um TestSuite.
Thomas W
1
Você pode usar a @SuiteClassanotação em várias classes e pode aninhar Suites dentro de Suites. A linha de pensamento para organizá-los no 3.x ainda é totalmente válida (e deve ser usada). Você pode estruturar tudo exatamente da mesma maneira que fazia antes; você apenas usa a sintaxe de anotação em vez de TestSuite.suite(). Não há realmente nenhum benefício em usar TestSuitesobre a anotação e você pode tirar proveito de todos os aprimoramentos do JUnit 4 se usar a anotação organizacionalmente equivalente.
Thunderforge
3

Aqui estão as etapas para criar um conjunto JUnit no eclipse:

  1. Na visão 'Package Explorer' da perspectiva eclipse 'Java', selecione seu (s) teste (s) de unidade em seu pacote, dentro do projeto eclipse java.
  2. Clique com o botão direito em qualquer um dos testes selecionados.
  3. No menu pop-up, selecione Novo, Outro ...
  4. Abra a pasta 'Java' e, em seguida, abra a pasta 'JUnit'
  5. Selecione 'JUnit Test Suite' e, em seguida, selecione o botão 'Avançar'
  6. Selecione o botão 'Concluir'
  7. Resultado: o arquivo da suíte 'AllTests.java' é criado, com testes incluídos automaticamente
  8. Selecione o botão Executar no eclipse
  9. Resultado: todos os testes no conjunto são executados
  10. Agora você pode apontar para este arquivo de suíte com ANT, Jenkins ou outra ferramenta de integração contínua de configuração de construção.

Informações da versão: isto é para eclipse Neon e JUnit 4. Você também pode selecionar JUnit 3 antes de selecionar 'Concluir' na etapa 6.

Galo Vermelho
fonte
Você poderia postar um arquivo build.xml mostrando como executar este conjunto de testes do ANT?
LiborStefek de
1

Do topo da minha cabeça, crie um TestSuite e invoque addTests. Se você quiser que algum recurso veja, tente qualquer biblioteca de código aberto como o hibernate ou algo do apache e dê uma olhada no diretório de teste do código-fonte para um conjunto de testes ...

mP.
fonte