Teste Unitário Camada de persistência

Como vocês testam sua camada de persistência?
Em java.
Muita gente usa JUnit?
Alguém tem algum tutorial sobre isso?
Aplicações web, são complexas de testar, não?Por exemplo o DS, está no JBoss e em tempo de execução ele é localizado, na camada de testes,temos que abstrair isso em um método ou existe uma solução mais rápida?

Use DBUnit e seja feliz…

[]´s

cara o JUnit sempre atendeu nos testes que precisei… mas o DB citado é bem mais específico ao propósito desejado…

Você também pode usar técnicas de inversão de controle (IoC).
A framework Spring é muito utilizada para isso.

Na verdade vc vai basicamente usar JUnit+DBUnit. DBUnit é uma extensão do JUnit.

[]´s

Minha experiência com testes unitários da camada de persistência sempre foram péssimas! :frowning:

Normalmente pra inserir em uma tabela, você precisa que tenham dados em mais 2 ou 3 no mínimo.
É aí que começa o drama. No projeto que eu to, tinha tabelas que dependiam de 7 ou 8 outras tabelas,
dai era um inferno fazer os inserts em todas pra testar um mero select.

O DBUnit não ajuda muito e é muito bugado. Eu cheguei a trabalhar um tempo nele pra ajudar corrigir bugs
mais parei.

Solução adotada pela minha equipe: abolição dos testes de DAO.

A gente faz pair-review do código do DAO só pra ver se não tem nada de muito erado, e depois testes mesmos
do DAO só testes funcionais efetuados pela equipe de testes.

Estamos bem felizes com essa solução, e diferente do que alguns temiam, não estamos tendo bugs de DAO em produção.
Muito pelo contrário.

Cara,
sempre usei DBUnit e nunca tive problemas. Ja usei ele em projetos com EJB2 CMP e era bem tranquilo. O fato de ter que inserir em varias tabelas não acho problema. Os xmls podem ser gerados a partir de uma base pronta.
Agora se vc possui consultas muito complexas, concordo que pode ficar complicado. Mas tmb acho que seu modelo pode estar focado no banco, e não nos objetos. as vezes acontece(banco legado), entao talvez sua solução foi acertada.

[]´s

Tbm uso DBunit e não tenho grandes problemas.
Porém, a única coisa que me chateia é ter que necessariamente existir primary-keys em todas as tabelas. O JPA, para relacionamentos com join-tables, por default ele cria a tabela de ligação sem atribuir a ela uma PK… e isso dá erro com o DBUnit.

Uma solução é fazer isso:

http://dbunit.wikidot.com/noprimarykeytable

… mas dá muito trampo criar “pseudo-keys” em filters para cada relacionamento e nos vários data-sets.

Como vc se vira com isso JGBT ?

Bom dia,

Tenho uma dúvida mais conceitual: é válido realizar testes unitários da camada de persistência através das classes DAO de um sistema, ou devo separar os testes entre somente na camada de persistência (utilizando por exemplo o dbUnit) e somente nas classes DAO (utilizando possivelmente Mock Object)?
Sou novato no pensamento TDD, porém creio que será de grande valia para minha experiência em programação. :slight_smile:

Agradeço desde já

Boa tarde,

Talvez nao fui mto claro com a minha duvida anterior. Por algum motivo nao muito claro fiz uma baita confusao com o conceito de camada de persistencia. De qualquer maneira, vou explicar o que ocorre por aqui, uma vez que pode ser a realidade de outro programador.
Nosso sistema Web nao possuia suite de testes e esta a meu cargo desenvolve-los (estou abordando a camada de persistencia atualmente). O sistema utiliza um arquivo de properties com as queries utilizadas, e minha duvida no post anterior eh justamente em relacao ao dominio dos testes (se devo e como separar os testes unitarios nas classes DAO com os testes unitarios do banco). Como nem todos os metodos das classes DAO mapeiam uma uma query, possivelmente terei que adicionar outras funcionalidades para realizar os testes unitarios do banco.
Entao minha duvida eh: qual a melhor solucao para esse caso?

Agradeco a atencao