Olá,
eu e minha luta com o JUnit, desde o último tópico que eu pergunto se tudo deve ser testado utilizando o JUnit, aqui vai uma pergunta que realmente não sei solucionar. O que eu desejo é criar um TestCase para minha classe UsuariosDAO e mais precisamente o seguinte método que ainda não foi implementado:
public boolean verificaLoginESenha(String login,String senha) {
return false;
}
O objetivo aqui é passar o login e senha que o usuário digitar e validar no banco de dados. O detalhe é que estou utilizando o Hibernate e minhas tabelas estão representadas no sistema como JavaBeans
Problemas:
:arrow: Li em alguns lugares que não se deve testar diretamente o banco de dados.
:arrow: Dentro desse método vou ter que carregar informações da tabela no banco de dados para o modelo, algo como um HQL fazendo um “select” com um where do login e senha.
:arrow: O SessionFactory do Hibernate é carregado apenas quando o Tomcat entra no ar, e para testar o JUnit eu não vou subir o Tomcat.
Alguem poderia me dar umas dicas de como eu posso montar esse TestCase?
Não sei se é a melhor maneira, mas o que eu faço é:
:arrow: Inicializo um banco de dados específico para testes com informações conhecidas
:arrow: Crio um objeto local com a informação que deve ser retornada do banco
:arrow: Faço a consulta no banco via DAO
:arrow: comparo o resultado da consulta com o objeto local
Detalhe, estou usando DAOs que acessam o BD diretamente, nada de hibernate. Aproveito a deixa para perguntar aos Java Gurus: o que estou fazendo está muito fora do recomendado?[/i]
Voce deve usar mock objects pros unit tests, vai ficar bem mais facil.
Pros testes de integração eu sugiro voce subir o hibernate usando algum banco java como Axion, Derby ou HSQL e manda ver nos testes.
[quote=“louds”]Voce deve usar mock objects pros unit tests, vai ficar bem mais facil.
Pros testes de integração eu sugiro voce subir o hibernate usando algum banco java como Axion, Derby ou HSQL e manda ver nos testes.[/quote]
Perfeito, geralmente eu uso os mock objects para verificar se a implementação do Objeto está correta, assim eu evito que erros não relacionados com a minha implementação interfiram na análise…
Mas realmente, a integração deve ser testada com os objetos reais e com a situação mais real possível (pelo menos de acordo com o cenário de teste desejado) para assim garantir uma maior validade do teste…