Testar CRUD com JUnit

Hello List,

minha dúvida é a seguinte, estou criando testes simples para garantir que os métodos estão sendo chamados corretamente com o JUnit.
Eu gostaria de testar o CRUD inserindo um registro ( ele tem a chave sequêncial ), alterar esse registro e na sequência excluir esse registro.
Mas me deparei com o seguinte problema, a cada vez que ele executa um novo método, ele limpa o valor dos atributos da classe e diz que está nulo ao tentar fazer o segundo método.

Segue um trecho do código para exemplificar:

[code]public class AcaoServiceTest extends TestCase {

private AcaoService acaoService = new AcaoService();
private Acao acao = new Acao();

public AcaoServiceTest(String name) {
	super(name);
}

    // Não adicionei as configurações no setup que antes de cada método ele chama esse método assim limparia os valores
protected void setUp() throws Exception {
	super.setUp();
}

   // Não adicionei nada no tearDown que depois de cada método ele chama esse método assim limparia os valores
protected void tearDown() throws Exception {
	super.tearDown();
}

    // Testando o save
public void testSave() throws Exception {
	acao.setOID(null);
	acao.setCod_acao("TESTE UNITAR");
	acao.setCod_gru_empresa("100");
	acao.setDes_acao("Ação de teste unitário");
	acao.setTexto_acao("Texto ação");
	acao.setTipo_acao(5); // Outros
	
	assertNotNull(acaoService.save(acao));
}

    // Aqui gostaria que utilizasse o mesmo objeto novamente, já com o OID preenchido para poder verificar que o update funcionou
public void testUpdate() throws Exception{
	acao.setTexto_acao("update teste unitário");
	assertNotNull(acaoService.update(acao));
	assertEquals("update teste unitário", acao.getTexto_acao());
}

    // Aqui testaria o remove do objeto criado
public void testRemove() throws Exception {
	assertEquals("true", acaoService.remove(acao));
}

    // Outros métodos omitidos que estão funcionando corretamente

}
[/code]

Como eu poderia fazer para guardar o OID do registro inserido e o estado do objeto para efetuar os testes seguintes?

Att,

Frank.

Olá,

Quando se fala em testes unitários, os testes devem ser independentes, ou seja, qualquer um deles precisa ser capaz de ser executado independentemente, seja sozinho ou seja em qualquer outra ordem. Por causa desse princípio o JUnit não guarda estado do objeto de teste, teoricamente ninguém precisaria disso…

Estes seus testes podem ser considerados testes integrados, pois testes unitários não envolvem banco de dados nem nenhum outro recurso externo.
Já que não são unitários mesmo, nada impediria que fossem executados em um único método de teste.

Gostaria de ouvir também a opinião de outras pessoas, mas acho que você poderia ter testes unitários “puros” em outro local, e nessa classe de testes integrados envolvendo BD faça tudo em um único método.

Ou pesquise sobre DBUnit! Eu ainda não tive oportunidade de usa-lo, é uma ferramenta que oferece recursos para execução de testes automáticos envolvendo banco de dados.