Galera, estou utilizando o Hibernate EntityManager com Spring 2, só que esotu injetando o entityManager direto na Action
Alguem está fazendo testes unitários utilizando esta arquitetura, Spring e Hibernate ?
Galera, estou utilizando o Hibernate EntityManager com Spring 2, só que esotu injetando o entityManager direto na Action
Alguem está fazendo testes unitários utilizando esta arquitetura, Spring e Hibernate ?
Preciso de uma ajuda para testar meus Daos e Service…
Você não faz testes unitários nos DAOs diretamente usando JUnit.
Para testar operações com o banco de dados, você pode usar o DBUnit.
No caso dos services, você deve usar um MockObject para simular o papel do DAO. Aconselho o JMock ou EasyMock.
ManchesteR,
Com estes frame´s descritos eu consigo integração com o Spring e Hibernate, quero dizer, eu consigo simular a conexão como o Spring realiza ?
[quote=jonimca]ManchesteR,
Com estes frame´s descritos eu consigo integração com o Spring e Hibernate, quero dizer, eu consigo simular a conexão como o Spring realiza ?
[/quote]
Você não vai testar a injeção do componente (no seu caso o EntityManager) na Action. Esse é papel do Spring e ele já foi testado para isso.
O que você irá testar de fato são os métodos da sua Action, classe de serviço, dominio, etc.
Por exemplo: Você tem uma Action LOGIN e o Spring inject seu EntityManager através do método set.
Algo assim:
public class LoginAction() {
EntityManager em;
public String doLogin() {
}
//Aqui ocorre a injeção
public void setEntityManager(EntityManager em) {
this.em = em;
}
}
O Seu objetivo é testar o método doLogin(). No JUnit, você cria a sua Action como uma classe normal e depois passa o EntityManager para o método set da Action
LoginAction login = new LoginAction(); //cria o objeto normalmente
EntityManager em = new EntityManager();
login.setEntityManager(em); //aqui você "injeta" manualmente o objeto
//--Aqui faz as regras dos testes
Perfeito, muito bom o exemplo, só mais uma dúvida
Desta maneira estarei testando a camada de servico ? e quanto ao Dao ?
[quote=jonimca]Perfeito, muito bom o exemplo, só mais uma dúvida
Desta maneira estarei testando a camada de servico ? e quanto ao Dao ?[/quote]
Se você quer testar os métodos do DAO ai você deverá usar outro mecanismo, aconselho dar um olhada no DBUnit.
Agora se você quer testar a interação entre o DAO e a camada de serviço por exemplo, ai você deve usar um MOckObject para simular o DAO.
Exemplo de uma camada de serviço que retorna todos os clientes:
public class CustomersService {
private DAOCustomers dao;
public void getCustomers() {
//faz alguma coisa aqui
//por exemplo, você tem um método getList() no DAO, que irá retornar uma List de clientes
List<Customers> list = dao.getList();
//faz mais alguma coisa aqui da regra de negocio
}
//esse método o Spring vai injetar seu DAO
public void setDAOCustomers(DAOCustomers dao) {
this.dao = dao;
}
}
Dentro do JUnit, irá existir um MockObject para simular o DAO e irá simular o retorno do método getList(), retornando uma quantidade de usuarios. Todo o processo é feito manualmente, ou seja, não existe conexão de fato com o banco de dados.
ManchesteR,
Obrigado pela ajuda, vou testar…
abs
ManchesteR,
Estou criando o teste mas me deparei com uma dúvida, sendo
Minha aplicação está funcionando dessa maneira.
Na camada Service o Spring injeta o Dao
Na camada do Dao o Spring injeta o EntityManager
Na camada do Struts, na action o Spring injeta o Service.
Entao, para eu testar a Action preciso passar os paramestros de mapping, form, request e responde ?
Eu consigo fazer isso ?
Struts 1? Se sim o buraco é mais embaixo.
Um dos grandes pecados do Struts 1 é o alto acoplamento (Uma Action é acoplada com seu ActionForm e com objetos do servidor, request e response).
Caso você queria testar um Action do Struts 1, você terá que procurar outro mecanismo, aconselho o Cactus. http://jakarta.apache.org/cactus/
Estou usando o Struts 1, realmente o acoplamento é alto.
Vou testar esta outra ferramenta…abs
Por que você não faz os testes na camada de serviço?
Testar componentes web é trabalhoso!
[]'s