Alguem tem algum exemplo de teste no JUNIT no DAO

6 respostas
junitjava
D

estou aprendendo JUNIT, e estou sentindo pouco de dificuldade. alguém tem alguma exemplo de teste no JUNIT testando um dao ou algo do tipo.

6 Respostas

L

Dayson,

O teu DAO faz conexões diretas com o banco de dados, utilizando JDBC? Se sim, o que você está procurando pode ser feito de duas maneiras:

  1. Você vai utilizar um banco de dados em memória, que vai estar ligado durante o teste e será desligado no final. Uma espécie de “mock” do DB
  2. Você vai utilizar um banco de dados real, rodando na tua máquina.

A primeira opção é mais ou menos um teste de unidade, e a segunda é um teste de integração.

Eu não tenho nenhum exemplo para te mostrar como isso funciona, mas existem ferramentas especializadas em resolver esse problema pra você. Dá uma olhadinha no DBUnit!

É uma extensão do JUnit para te ajudar a fazer testes que envolvem bancos de dados. Funciona mais ou menos assim:

  1. Você define o estado inicial do banco, utilizando formatos conhecidos como JSON, XML, YML, etc (a ferramenta vai interpretar e gerar o SQL para fazer a inserção dos dados);
  2. Você toma ações dentro do teste, como salvar uma entidade, ou alterar algo, ou buscar algo;
  3. Você faz asserts do JUnit, em casos como busca, onde você sabe exatamente o que tem dentro do banco (por causa do passo 1) e portanto sabe o que deve vir nas pesquisas;
  4. Você instrui o DBUnit a fazer uma varredura do banco e verificar se ele se encontra em um estado que você espera (para o caso de inserts/updates), de uma forma extremamente parecida com o passo 1.

Com certeza devem existir outras ferramentas. Inclusive, você também pode fazer tudo isso manualmente, mas convenhamos: é um saco, e vai dar MUITO trabalho.

Dá para usar o DBUnit com JPA também, o que se torna uma atividade extremamente produtiva. Eu utilizo nos meus projetos e acho bem útil!

E realmente, como o @nel falou, também não acho interessante ficar fazendo teste de integração. Acho o teste End to End (ou Acceptance, ou Functional, como queira) bem mais interessante para testar a lógica de busca e persistência dos dados, porque engloba o teu teste do DB e de quebra ainda testa as funcionalidades da aplicação inteira, de ponta a ponta, da view ao db. Para fazer isso, eu to usando o Arquillian. Inclusive, fiz uma pergunta uns dias atrás para saber o que o pessoal gostava de utilizar, mas ninguém respondeu :disappointed:

N

@Dayson_Rodrigues na minha opinião, você nem deveria estar pensando em teste unitário para o seu DAO, salvo se usar uma API como QueryDSL, no qual consegue testar a query em si, mas não os valores em banco.

Se está pensando em validar conteúdo em banco e algo do genêro, não estamos mais falando em testes unitários. Dê uma lida sobre testes end-to-end e integração.

N

Pode compartilhar conosco como tem sido sua experiência com Arquillian?

D

humm valeu pela dica, no caso seria um teste de unidade. Ou seja, seria testar um método por exemplo “teste de unidade”. Se sim é isso aí, infelizmente sou novo na área ai tudo vira novidade.

L

Tem sido bem interessante. O único problema, pra mim, é que eu não vejo ninguém utilizando isso. Estou muito curioso para saber como que são feitos os testes em empresas maiores (se é que são feitos de forma automatizada) nesse sentido.

Estou usando a extensão do Arquillian que usa DBUnit pra manipular o estado do banco de dados, é algo que tem me ajudado bastante na parte dos testes end to end.

Eu comecei a estudar TDD e aplicar de verdade há pouco tempo, e o único arrependimento meu é não ter começado antes.

Fica muito fácil de ver quando as coisas quebram e, mais importante, a gente cria o sistema pensando em suas funcionalidades, do ponto de vista do usuário programador, quando escreve o teste do jeito que gostaria que o sistema funcionasse, para finalmente ir lá e implementar.

Eu não tenho muito o que falar especificamente sobre o arquillian, porque minha utilização dele é extremamente simples e não tenho muita experiência com ele. Configuro para ele subir o servidor e me dar a url de deploy, para que eu possa fazer as requisições. Ele também tem ferramentas para fazer injeção de dependências dentro do teste, mas eu não utilizo essa parte.

N

Entendi! Bacana! Obrigado por compartilhar.

Criado 7 de fevereiro de 2017
Ultima resposta 7 de fev. de 2017
Respostas 6
Participantes 3