Ordem de execução dos testes no JUnit

Hoje me deparei com uma situação.

Queria que meus testes do meu TestCase fossem executados em uma ordem determinada. Achei que ele executaria na ordem declarada dos métodos ou então por ordem alfabética. Ledo engano!

Se quiserem que os testes executem numa determinada ordem, sigam o que este artigo diz ( http://www.javaworld.com/javaworld/jw-12-2000/jw-1221-junit.html?page=2 ).

Crie um método estático chamado suite, declarando a ordem de execução dos métodos. Comigo funcionou bem.

public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest(new SomeTestCase ("testDoThisFirst";)); suite.addTest(new SomeTestCase ("testDoThisSecond";)); return suite; }

Existe um problema conceitual aí, creio. Se você precisa que os testes executem em uma dada ordem eles não são testes independentes, não seriam então partes do mesmo teste?

Pensei nisto também, mas… conceitos à parte, fica aí a dica para quem um dia precisar.

Revivendo essa thread…

E num caso como esse teste que estou fazendo agora?

@Test
public final void delete() {
DAO<Parceiro, String> parceiroDAO = new GenericBoxDAO<Parceiro, String>(){};
Parceiro parc = new Parceiro();
parc.setPartnerId(“004”);
assertEquals(1, parceiroDAO.delete(parc));

  GenericBoxDAO<InternalUsers, String> internalUsersDAO = new GenericBoxDAO<InternalUsers, String>(){};
  InternalUsers user = new InternalUsers();
  user.setLogin("testLogin");
  assertEquals(1, internalUsersDAO.delete(user));

}

@Test
public final void insert() {
GenericBoxDAO<Parceiro, String> parceiroDAO = new GenericBoxDAO<Parceiro, String>(){};
Parceiro parc = new Parceiro(“004”, “TestPartner”, "teste@partner.com", “ag”, “Agencia do interior de minas.”,
“CNPJ”, “Rua Tal, 232”, “Juiz de Fora”, “MG”, “12342342”, “Sudeste”, “(31)555-5555”, true, true, false);
assertEquals(1, parceiroDAO.insert(parc));

  GenericBoxDAO<InternalUsers, String> internalUsersDAO = new GenericBoxDAO<InternalUsers, String>(){};
  InternalUsers user = new InternalUsers("testLogin", "test@email.com", "testUser", "testPassword");
  assertEquals(1, internalUsersDAO.insert(user));

}

Conceitualmente falando, eu teria que inserir antes de deletar e deletar antes de inserir para que o teste funcione.
Mas se eu puder dizer que a ordem de execução é insert primeiro e depois delete, isso estaria resolvido.

Qual das duas opções é melhor?

Obrigado pela dica danieldestro precisava ter uma ordem de execução pois estava testando validação de usuário e alteração e ele não estava executando nessa ordem…

Aproveitando… Gostaria de perguntar: O JUnit executa os métodos aleatoriamente?