![Page 1: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/1.jpg)
Testes de Integração
com OpenEJB
Gabriel Ozeas Janeiro de 2013
![Page 2: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/2.jpg)
2
MOTIVAÇÃO
Permi(r execução dos app+testes (funcionais, integração e de unidade)
localmente.
JBOSS
Jenkins
localhost
rmi,webservice
FUNCIONAIS
Concorrência entre versões do sistema em QA
Base de dados
![Page 3: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/3.jpg)
MOTIVAÇÃO
3
Focar a execução dos testes em parte do sistema.
Cache Core Config Service Offer
Persistence WebServices Web Admin
Testes
APLICAÇÃO
Código
Deploy
Teste
![Page 4: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/4.jpg)
4
Testes de Integração Focados na comunicação entre componentes e recursos Específicos de um cenário
base de dados
fila de mensagens
A
Teste • Tempo de execução maior que
testes de unidade, entre segundos.
• Usam mesmos mocks, mas mocks de maior tamanho.
Sistema B
![Page 5: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/5.jpg)
(des)MOTIVAÇÃO
5
DEBUG REMOTO
* Quanto menos debug, melhor
Problemas de concorrência no ambiente
![Page 6: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/6.jpg)
OpenEJB
6
§ Desde 1999 § Container EJB leve § Em baixo do guarda-‐chuva da Apache desde 2007 § Suporte a várias versões da especificação EJB
§ 1.1, 2.0, 2.1, 3.0 e parcialmente 3.1 § Suporte a outras especificações como:
§ JAX-‐WS § JMS § JCA
![Page 7: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/7.jpg)
7
OpenEJB Implementação da especificação EJB
presente no Apache Gerônimo
Ajudaram as versões da especificação EJB evoluirem
O Sucesso veio após a especificação 3.0
Possibilitar incluir EJBs em WARs na especificação 3.1
API de container embu(do na versão 3.1
EJBContainer container =javax.ejb.embeddable.EJBContainer.createEJBContainer();
Algumas contribuições Do OpenEJB
![Page 8: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/8.jpg)
Adicionando o OpenEJB
8
<repository> <id>apache.repo</id> <url>hMps://repository.apache.org/content/repositories/releases/</url> </repository>
<dependency> <groupId>org.apache.openejb</groupId> <ar(factId>openejb-‐core-‐hibernate</ar(factId> <type>pom</type> <scope>test</scope> </dependency>
@Test public void askTicketPriceShouldReturn90Cents() throws Excep(on { Context context = new Ini(alContext(); TicketManager ScketManager = (TicketManager) context.lookup(”TicketManagerBeanLocal"); Money money = (cketManager.getPriceForTicket(”uol.(ckets.cloud"); assertEquals("R$ 0.900000", money.toString()); }
Realizando lookup no contexto
![Page 9: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/9.jpg)
<?xml version="1.0" encoding="UTF-‐8"?> <ejb-‐jar />
Injetando componentes
9
@LocalClient public class SimpleTestWithInjec(on { @EJB private TicketManager (cketManager; @Test public void askTicketPriceShouldReturn90Cents() throws Excep(on { Proper(es p = new Proper(es(); p.put(Context.INITIAL_CONTEXT_FACTORY, "org.openejb.client.LocalIniHalContextFactory"); Context context = new Ini(alContext(p); context.bind("inject", this); Money money = (cketManager.getPriceForTicket("uol.(ckets.cloud"); assertEquals("R$ 0.900000", money.toString()); } }
src/tests/resources/META-‐INF/ejb-‐jar.xml
Habilita Full-‐Scan no OpenEJB
![Page 10: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/10.jpg)
Permite a criação de qualquer componente dentro do testes: Recursos mais interessantes:
– DataSources – Connec(onFactory – Queue, Topic – Mail Session
Criando recursos dentro dos testes
10
Proper(es p = new Proper(es(); p.put("TechDayJTADataSource", "new://Resource?type=DataSource"); p.put("TechDayJTADataSource.JdbcDriver", "com.mysql.jdbc.Driver"); p.put("TechDayJTADataSource.JdbcUrl", "jdbc:mysql://localhost:3306/techday"); p.put("TechDayJTADataSource.UserName", "root"); p.put("TechDayJTADataSource.JtaManaged", "true");
Proper(es p = new Proper(es(); p.put(”TicketPriceQueue", "new://Resource?type=javax.jms.Queue"); p.put(”TicketPriceQueueResponse", "new://Resource?type=javax.jms.Queue");
![Page 11: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/11.jpg)
O descritor openejb.xml permi(r configurar recursos iniciados junto com o container.
Adicionando recursos via descritor
11
<?xml version="1.0" encoding="UTF-‐8"?> <openejb> <Resource id="TechDayJTADataSource" type="DataSource"> JdbcDriver com.mysql.jdbc.Driver JdbcUrl jdbc:mysql://localhost:3306/techday UserName root JtaManaged true </Resource> </openejb>
![Page 12: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/12.jpg)
Sempre interagir com recursos que possuem estado conhecido.
Persistência dentro dos testes
12
@Before public void setUp() throws Excep(on { Proper(es p = new Proper(es(); p.put("openejb.conf.file", "src/test/resources/openejb.xml"); Context context = new Ini(alContext(p); context.bind("inject", this); transacSonManager.begin(); } @A{er public void tearDown() throws Excep(on { transacSonManager.rollback(); }
![Page 13: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/13.jpg)
Ajuda a focar os testes somente nas classes que importam. Era u(lizado internamente para testes no OpenEJB.
ApplicaSon Composer
13
@LocalClient @RunWith(ApplicaSonComposer.class) public class TicketEn(tyIntegra(onTest { …. @Module public EjbJar modulo() { EjbJar Scket = new EjbJar(”ScketManager"); Scket.addEnterpriseBean(new StatelessBean(TicketManagerBean.class)); return Scket; } @ConfiguraSon public Proper(es config() { Proper(es p = new Proper(es(); p.put("TechDayJTADataSource", "new://Resource?type=DataSource"); p.put("TechDayJTADataSource.JdbcDriver", "com.mysql.jdbc.Driver"); p.put("TechDayJTADataSource.JdbcUrl", "jdbc:mysql://localhost:3306/techday"); p.put("TechDayJTADataSource.UserName", "root"); p.put("TechDayJTADataSource.JtaManaged", "true"); return p; }
![Page 14: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/14.jpg)
DOCUMENTAÇÃO
PROBLEMAS
14
![Page 15: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/15.jpg)
Integração com outras tecnologias além da especificação
PROBLEMAS
15
![Page 16: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/16.jpg)
16
TomEE: CDI, EJB, JPA, JSF, JSP, JSTL, JTA, Servlet, JavaMail, Bean Valida(on TomEE+: TomEE + JAX-‐RS, JAX-‐WS, JMS, Connector (JCA)
JelasSc: primeira empresa de PAAS que uSliza o TomEE
Outras projetos adicionados ao tomcat: AcSveMQ, CXF, MyFaces, OpenJPA, OpenWebBeans
![Page 17: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/17.jpg)
RESULTADO
17
Suite com centenas de testes de integração roda em 1 minuto,
interagindo com DAS e banco.
Permite rodar todos os testes de regressão várias vezes por dia E não somente na fase final da história.
Podemos debugar localmente, interagindo com ambientes de stage e qa
![Page 18: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/18.jpg)
Outra opção
18
Extensões para Jboss Tomcat Glassfish Resin Weld
OSGI CloudBees TomEE Je�y Google AppEngine Spring
![Page 19: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/19.jpg)
Diferenças
19
Ope
nEJB
APP+TESTES Container
Arqu
illian
APP+TESTES
embu(do
Servidor de Aplicação ou Container
copia
![Page 20: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/20.jpg)
20
@RunWith(Arquillian.class) public class GerenciadorReservasTest { @EJB private GerenciadorReservas reservas; @Deployment public sta(c JavaArchive gerandoArquivoDeploy() { JavaArchive arquivo = ShrinkWrap.create(JavaArchive.class); arquivo.addPackages(true, “uol.techday.(cketmanager”); arquivo.addAsManifestResource(EmptyAsset.INSTANCE, ”ejb-‐jar.xml"); return arquivo; } @Test public void reservaDeveGerarCobranca() throws Excep(on { …. }
![Page 21: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/21.jpg)
21
O Arquillian é mais flexível que o OpenEJB
Mas por quê não usamos os Arquillian?
Projeto recente, depedências em ALPHA
Fácil trocar um pelo outro, pois o OpenEJB te obriga a seguir especificação
![Page 22: UOL Tech Day: Testes de Integração com OpenEJB](https://reader033.vdocuments.net/reader033/viewer/2022042818/55ae12511a28ab943b8b4738/html5/thumbnails/22.jpg)
Obrigado!
22