Testes Integrados em sistemas Back-end

Tenho um sistema totalmente back-end que expõe beans EJB para seus clientes.
Existem algumas integrações dentro deste sistema, como por exemplo um bean EJB
chamar um outro bean EJB em outro módulo.

Gostaria de saber como poderia fazer testes integrados deste sistema simulando o
comportamento do container EJB, mas “mockando” a camada de DAO.

Gostaria de testar o Bean A chamando o Bean B, inclusive vendo se o Bean B cria uma nova
transação ou mantém a transação do Bean A, porém, eu não quero usar o banco de dados, porque
fazer teste usando banco de dados é um saco, ainda mais com o tamanho da nossa base aqui.

Alguém já precisou fazer algo parecido? Aceito sugestões!

[]'s

[quote=lavh]

Gostaria de saber como poderia fazer testes integrados deste sistema simulando o
comportamento do container EJB, mas “mockando” a camada de DAO.

[]'s[/quote]

Pq vc não usa o container ao invés de simulá-lo!?

[quote=Taz][quote=lavh]

Gostaria de saber como poderia fazer testes integrados deste sistema simulando o
comportamento do container EJB, mas “mockando” a camada de DAO.

[]'s[/quote]

Pq vc não usa o container ao invés de simulá-lo!?[/quote]

Porque eu queria poder executar estes testes sem a necessidade de ter um ambiente com servidor de aplicação up

Os testes poderiam ser executados via maven por exemplo.

[quote=lavh][quote=Taz][quote=lavh]

Gostaria de saber como poderia fazer testes integrados deste sistema simulando o
comportamento do container EJB, mas “mockando” a camada de DAO.

[]'s[/quote]

Pq vc não usa o container ao invés de simulá-lo!?[/quote]

Porque eu queria poder executar estes testes sem a necessidade de ter um ambiente com servidor de aplicação up

Os testes poderiam ser executados via maven por exemplo.[/quote]

Ué, mas EJBs são gerenciados pélo container, e sem ele você teria que mockar os EJBs tb.

[quote=cmoscoso][quote=lavh][quote=Taz][quote=lavh]

Gostaria de saber como poderia fazer testes integrados deste sistema simulando o
comportamento do container EJB, mas “mockando” a camada de DAO.

[]'s[/quote]

Pq vc não usa o container ao invés de simulá-lo!?[/quote]

Porque eu queria poder executar estes testes sem a necessidade de ter um ambiente com servidor de aplicação up

Os testes poderiam ser executados via maven por exemplo.[/quote]

Ué, mas EJBs são gerenciados pélo container, e sem ele você teria que mockar os EJBs tb.[/quote]

Então, foi isso que eu perguntei! Eu vi que tem um EJBMock, mas parece que o projeto foi descontinuado.

Eu vou usar JBoss Embarcado (http://www.guj.com.br/posts/list/79143.java) mesmo + EasyMock para mockar os meus DAOs e eu injeto eles na hora do teste via spring e sucesso.

Valeu Pessoal.

Tente dar uma olhada nos projetos Cactus e DBUnit

jakarta.apache.org/cactus/index.html
www.dbunit.org/

Edited: faltaram as tags URL

[quote=lavh]

Porque eu queria poder executar estes testes sem a necessidade de ter um ambiente com servidor de aplicação up

Os testes poderiam ser executados via maven por exemplo.[/quote]

E pq o Maven te impediria de fazer os testes dentro do AS?

Para testes integrados, o mais correto não seria rodar no AS mesmo, sem mockar nada? Com um ambiente semelhante ao ambiente de produção?

Sim, é o que eu tb acho. E o teste dentro do container ainda simplifica bastante sua vida.

Hoje eu uso Maven + plugins do Maven + JBoss AS + JBoss ESB + testes de integração em componentes tranquilamente.

Acho que “Teste de integração” é um termo muito amplo para decidir onde rodar isso ou aquilo.

Eu poderia testar a integração de duas classes de negócio, onde nenhuma das duas utilizam recursos de um AS ou banco de dados. Para tal não faz sentido roda-lo no ambiente servidor.

Para testes de aceitação, estes sim devem rodar sem dúvida em um ambiente o mais próximo possível da produção: - em um servidor de aplicação, conexões de banco, filas de mensagens e etc.

No contexto do nosso amigo acho melhor a “integração” dentro do servidor. Lembre-se que ele precisa testar transações.

Depende. Eu faço testes funcionais, com transações, em Façades de Seam Component com o Jboss MC (embeddable) e realizo os testes de aceitação no servidor.

Oras, e desde quando o JBoss 5 (MC de MicroContainer para os curiosos) deixou de ser servidor/container?

Já discutimos testes usando MC por aqui … http://www.guj.com.br/posts/list/81757.java

Não vejo diferença entre um teste “funcional” no 4.2.2 ou no 5 (20 segundos?).

Além disso, prefiro testar com as versões/configurações idênticas aos ambientes de homologação/produção …

Para esclarecer, o Jboss MicroContanier é um servidor tão quanto o JBoss Microkernel foi … ou seja, não é. Ele é usado pelo App Server, mas não é um. Na verdade ele se assemelha muito mais a Spring do que a JBoss. O problema é o pé que o projeto esta hoje. Ainda esta lento (embora na minha máquina ele não demore mais de 8 segundos), e alguns bugs realmente atrapalham.

Mais detalhes:
http://www.jboss.org/file-access/default/members/jbossmc/freezone/docs/2.0.x/userGuide/overview.html
http://www.jboss.org/jbossmc/

Eu não acho errado fazer os testes no ambiente similar a produção … depende do que esta sendo testado e sua granulariedade.

:?:

Confundiu…

O Microkernel por si só nunca foi um servidor de aplicação, assim como o MC não é.
JBoss 5 utilizará o MC como integrador, mas não é a mesma coisa.

Meio filosófico isso… :roll:

De qualquer maneira vc usa um container em TODOS os seus níveis de testes e isso é o que defendo desde o início…