54
Arquillian Ippevent 19/01/2012 Alexis Hassler

Arquillian - Ippevent 01/2012

Embed Size (px)

Citation preview

Page 1: Arquillian - Ippevent 01/2012

ArquillianIppevent 19/01/2012

Alexis Hassler

Page 2: Arquillian - Ippevent 01/2012
Page 3: Arquillian - Ippevent 01/2012

Arquillian

Page 4: Arquillian - Ippevent 01/2012
Page 5: Arquillian - Ippevent 01/2012

@AlexisHassler

Page 6: Arquillian - Ippevent 01/2012

JavaEE

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

Page 7: Arquillian - Ippevent 01/2012

Tests

Unitaire Intégration

Page 8: Arquillian - Ippevent 01/2012

Test unitaire

ClassToBeTested

Page 9: Arquillian - Ippevent 01/2012

Test unitaire

mock

new

Page 10: Arquillian - Ippevent 01/2012

✔ EJB

Page 11: Arquillian - Ippevent 01/2012

Test d'intégration

EjbToBeTested

TransactionSécurité

Intercepteurs

...

Page 12: Arquillian - Ippevent 01/2012

Test d'intégration

Composant déployé dans son

conteneur

– Mode embarqué

– Déploiement distant

Page 13: Arquillian - Ippevent 01/2012

EJB

Mode embarqué

EJBContainer.createEJBContainer()

Context.lookup(...)

Page 14: Arquillian - Ippevent 01/2012

Spring Framework

Runner

– Démarrer l'ApplicationContext

@RunWith

@Autowired

Page 15: Arquillian - Ippevent 01/2012

CDI

Weld SE

– Runner maison

cf. http://blog.alexis-hassler.com/2011/01/junit-runner-pour-cdi-weld.html

@RunWith

@Inject

Page 16: Arquillian - Ippevent 01/2012

JPA

Conteneur JPA

Persistence.createEntityManagerFactory(...) .createEntityManager()

Page 17: Arquillian - Ippevent 01/2012

JMS

Conteneur autonome

new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"

);...

Page 18: Arquillian - Ippevent 01/2012

HTTP / Servlet / JSP / ...

Conteneur autonome

new ServletTester()

new HttpTester()

Page 19: Arquillian - Ippevent 01/2012

✔ EJB / OpenEJB

Page 20: Arquillian - Ippevent 01/2012

Problèmes

1 conteneur par technologie

– Pas de mode embarqué universel

Configurations spécifiques

Mode remote + Maven

– pas dans le cycle de vie standard

Page 21: Arquillian - Ippevent 01/2012

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

JavaEE

Page 22: Arquillian - Ippevent 01/2012

JavaEE

ServletServlet

JPA

CDI

JSF

JAX-RS

BeanValidation

Tran

sact

ion

JMS

EJB

Page 23: Arquillian - Ippevent 01/2012

Tester les composantspas les classes isolées

pas toute l'application

Page 24: Arquillian - Ippevent 01/2012

gérer le conteneur dans les tests

Mettre les

tests dans le conteneur

plutôt que

Page 25: Arquillian - Ippevent 01/2012

Structure d'un test

@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test

Page 26: Arquillian - Ippevent 01/2012

✔ EJB / OpenEJB

Page 27: Arquillian - Ippevent 01/2012

addAsManifestResource

Page 28: Arquillian - Ippevent 01/2012

Conteneurs

WebLogic Cloudbees

OpenShift

Weld

Websphere

Tomcat

OpenWebBeans

OpenEJB

Jetty

JBoss AS

Resin Glassfish

Page 29: Arquillian - Ippevent 01/2012

Conteneurs

ConteneurArquillianD

epl

oya

bleC

onta

iner

Page 30: Arquillian - Ippevent 01/2012

Conteneurs

Profil maven

Page 31: Arquillian - Ippevent 01/2012

✔ EJB / Glassfish Embedded✔ CDI / Glassfish Embedded

✔ CDI / Weld SE

Page 32: Arquillian - Ippevent 01/2012

Conteneurs

Remote

Managed

Embedded

Page 33: Arquillian - Ippevent 01/2012

Conteneur embarqué

Démarrage du conteneur (in-process)

Déploiement de l'archive

Exécution locale du test

Retrait de l'archive

Arrêt du conteneur

Page 34: Arquillian - Ippevent 01/2012

Conteneur géré

Démarrage du conteneur (out-process)

Déploiement de l'archive

Déploiement du service Arquillian

Exécution du test dans le conteneur

Retrait de l'archive

Arrêt du conteneur

Page 35: Arquillian - Ippevent 01/2012

Conteneur distant

Conteneurpréalablement démarré

Déploiement de l'archive

Déploiement du service Arquillian

Exécution du test dans le conteneur

Retrait de l'archive

Page 36: Arquillian - Ippevent 01/2012

✔ EJB / JBoss AS 7 managed✔ EJB / JBoss AS 7 remote

Page 37: Arquillian - Ippevent 01/2012

Protocole Servlet

ShrinkWrap.create(WebArchive.class) .addClasses(...);

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Page 38: Arquillian - Ippevent 01/2012

Protocole Servlet 3.0

ShrinkWrap.create(JavaArchive.class) .addClasses(...);

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Page 39: Arquillian - Ippevent 01/2012

Arquillian ear

Protocole Servlet 2.5

ShrinkWrap.create(JavaArchive.class) .addClasses(...);

Java Archive

JUnit

Arquillian

Arquillian war

Arquillian Servlet

Test case

Page 40: Arquillian - Ippevent 01/2012

Protocole Servlet

Enterprise Archive

ShrinkWrap.create(JavaArchive.class) .addClasses(...);

Java Archive

JUnit

Arquillian

Arquillian war

Arquillian Servlet

Test case

ShrinkWrap.create(EnterpriseArchive.class) .addAsModule(jar);

Page 41: Arquillian - Ippevent 01/2012

Protocole JMX-AS7

JBoss AS 7

Arquillian Service

Arquillian MBean

Any Archive

Test case

JUnit

Arquillian

ShrinkWrap.create(XxxArchive.class) .addClasses(...);

Page 42: Arquillian - Ippevent 01/2012

✔ EJB / deploymentExportPath

Page 43: Arquillian - Ippevent 01/2012

as-client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

Web Archive

Test case

JUnit

Arquillian

Page 44: Arquillian - Ippevent 01/2012

as-client

URL servletURL ;

@Deploymentpublic static Archive createDeployment() { ... }

@Testprivate void shouldDoX() { ... }

@ArquillianResource(MyServlet.class)

(testable=false)

@RunAsClient

Page 45: Arquillian - Ippevent 01/2012

as-client

Utilisable pour du test fonctionnel

– Selenium

– HtmlUnit

– HttpUnit

– ...

Page 46: Arquillian - Ippevent 01/2012

✔ JAX-RS / JBoss AS 7 managed

Page 47: Arquillian - Ippevent 01/2012

Extensions

JUnit

Persistence

JBehave

Selenium

Performance

Jacoco

Seam 2

Byteman

SpockTestNGJSFUnit

Page 48: Arquillian - Ippevent 01/2012

Extensions

Intégration sélénium

@RunWith(Arquillian.class)public class BasicClientTest {

@Drone DefaultSelenium browser;

@Test public void testLoginAndLogout() { browser.open(deploymentUrl + "home.jsp"); ... }}

Page 49: Arquillian - Ippevent 01/2012

Extensions

container

Test Enricher

Auxilliary Archive Appender

Archive ProcessorApplication

Deployable Container

AuxiliaryProtocol

Deployment Packager

Page 50: Arquillian - Ippevent 01/2012

Extensions maison

FW+

NAT

Page 51: Arquillian - Ippevent 01/2012

Extensions maison

ProtocolMetaData

HTTPContext

Server Address

FW Address

Page 52: Arquillian - Ippevent 01/2012

✔ NATExtension

Page 53: Arquillian - Ippevent 01/2012

Arquillian

Test d'intégration

In-container / As-client

Multi-conteneurs

Extensible

Page 54: Arquillian - Ippevent 01/2012

Références

http://jboss.org/arquillian

http://github.com/arquillian

http://github.com/hasalex/arquillian-demo

http://slideshare.com/sewatech