Teste de sistema - cenário difícil

Prezados,

Imagine que tenho um teste de sistema (teste de interface do usuário), para realizar o teste dessa interface preciso de dados no meu banco. Imagine então que para preencher essa tela preciso dos dados da tabela A, que por sua vez tem uma chave estrangeria da tabela B e assim sucessivamente. Logo preciso popular um número muito grande de tabelas, sendo que para aquele teste, precisaria somente dos dados de A.

Qual abordagem vcs usam? Preenchem tudo?

Desabilitam chave estrangeira? Vi que o dbunit tem essa opção, mas achei “chato” escrever um xml para fazer a carga, atualmente estou instanciando objetos e salvando com hibernate, o que deixa o teste muito custoso, visto que o grafo de objetos pode ser enorme.

grande abrasssss

É possível fazer com Hibernate direto: JUnit com HSQLDB, JPA e Hibernate.

Desse modo você poderia criar o objeto, persistir em algum banco (no caso do exemplo acima um banco de memória) e pronto.

Você cria o objeto do modo necessário e persiste, não existe a necessidade de usar xml. [=

opa blz Hebert?

cara acho que vc não entendeu a situação.

Tenho um grafo complexo a ser preenchido, o post não fala nada sobre isso, usa uma entidade simples.

Imagine que dog tenha dono, dono tenha convenio e assim sucessivamente. Esse é o problema a ser explorado. Por isso perguntei se alguém tem uma abordagem pra isso, algo como dbunit faz.

Não tenho problemas nos dados serem persistidos em disco ao invés de memória, pois isso seria como uma carga para o teste, que pode ser realizado com selenium (ai sim poderia ser em memoria) ou para um tester humano, dai necessito em disco.

off: não é legal DAO cuidar de transação.

abrassss

[quote=renanreismartins]opa blz Hebert?

cara acho que vc não entendeu a situação.

Tenho um grafo complexo a ser preenchido, o post não fala nada sobre isso, usa uma entidade simples.

Imagine que dog tenha dono, dono tenha convenio e assim sucessivamente. Esse é o problema a ser explorado. Por isso perguntei se alguém tem uma abordagem pra isso, algo como dbunit faz.

Não tenho problemas nos dados serem persistidos em disco ao invés de memória, pois isso seria como uma carga para o teste, que pode ser realizado com selenium (ai sim poderia ser em memoria) ou para um tester humano, dai necessito em disco.

off: não é legal DAO cuidar de transação.

abrassss[/quote]off: melhor deixa o assunto do DAO pra lá ou esse post vai virar outra coisa. Existem 1000 motivos para não ser, mas também posso te mostrar outros 1000. [=

Se voce quer testar a interface com o usuario, nao precisa de dados no banco, precisa apenas de dados na interface do usuario :wink:

hm… excelente sanches, mas acho que não me expressei bem então!

vamos la, imaginando o cenário acima vamos cortar a parte de interface, que dei apenas pra exemplificar

[quote]
…preciso dos dados da tabela A, que por sua vez tem uma chave estrangeria da tabela B e assim sucessivamente. Logo preciso popular um número muito grande de tabelas, sendo que para aquele teste, precisaria somente dos dados de A.

Qual abordagem vcs usam? Preenchem tudo?

Desabilitam chave estrangeira? Vi que o dbunit tem essa opção, mas achei “chato” escrever um xml para fazer a carga, atualmente estou instanciando objetos e salvando com hibernate, o que deixa o teste muito custoso, visto que o grafo de objetos pode ser enorme.

grande abrasssss[/quote]

esse é o real problema, alguma idéia?

abrassss

Sem ver a aplicacao, posso apenas oferecer duas linhas de raciocinio:

  1. Com relacao ao escopo de seu teste: O que voce esta tentando testar exatamente? Voce realmente precisa do banco de dados para este teste? Seria possivel dividir os testes de persistencia/pesquisa ao bd dos testes das regras de negocio?

  2. Com relacao ao design da sua aplicacao: O fato de voce precisar de um grafo de objetos complexo para o seu teste nao pode ser uma indicacao de alto grau de acoplamento? Seria possivel mudar o modelo para que ficasse mais facil de testa-lo? Se sim, essa mudanca melhoraria o design da sua aplicacao?