Arquillian - Ippevent 01/2012

Post on 14-May-2015

720 views 5 download

Tags:

Transcript of Arquillian - Ippevent 01/2012

ArquillianIppevent 19/01/2012

Alexis Hassler

Arquillian

@AlexisHassler

JavaEE

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

Tests

Unitaire Intégration

Test unitaire

ClassToBeTested

Test unitaire

mock

new

✔ EJB

Test d'intégration

EjbToBeTested

TransactionSécurité

Intercepteurs

...

Test d'intégration

Composant déployé dans son

conteneur

– Mode embarqué

– Déploiement distant

EJB

Mode embarqué

EJBContainer.createEJBContainer()

Context.lookup(...)

Spring Framework

Runner

– Démarrer l'ApplicationContext

@RunWith

@Autowired

CDI

Weld SE

– Runner maison

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

@RunWith

@Inject

JPA

Conteneur JPA

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

JMS

Conteneur autonome

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

);...

HTTP / Servlet / JSP / ...

Conteneur autonome

new ServletTester()

new HttpTester()

✔ EJB / OpenEJB

Problèmes

1 conteneur par technologie

– Pas de mode embarqué universel

Configurations spécifiques

Mode remote + Maven

– pas dans le cycle de vie standard

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

JavaEE

JavaEE

ServletServlet

JPA

CDI

JSF

JAX-RS

BeanValidation

Tran

sact

ion

JMS

EJB

Tester les composantspas les classes isolées

pas toute l'application

gérer le conteneur dans les tests

Mettre les

tests dans le conteneur

plutôt que

Structure d'un test

@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test

✔ EJB / OpenEJB

addAsManifestResource

Conteneurs

WebLogic Cloudbees

OpenShift

Weld

Websphere

Tomcat

OpenWebBeans

OpenEJB

Jetty

JBoss AS

Resin Glassfish

Conteneurs

ConteneurArquillianD

epl

oya

bleC

onta

iner

Conteneurs

Profil maven

✔ EJB / Glassfish Embedded✔ CDI / Glassfish Embedded

✔ CDI / Weld SE

Conteneurs

Remote

Managed

Embedded

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

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

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

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

Protocole Servlet

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

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Protocole Servlet 3.0

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

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Arquillian ear

Protocole Servlet 2.5

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

Java Archive

JUnit

Arquillian

Arquillian war

Arquillian Servlet

Test case

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);

Protocole JMX-AS7

JBoss AS 7

Arquillian Service

Arquillian MBean

Any Archive

Test case

JUnit

Arquillian

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

✔ EJB / deploymentExportPath

as-client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

Web Archive

Test case

JUnit

Arquillian

as-client

URL servletURL ;

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

@Testprivate void shouldDoX() { ... }

@ArquillianResource(MyServlet.class)

(testable=false)

@RunAsClient

as-client

Utilisable pour du test fonctionnel

– Selenium

– HtmlUnit

– HttpUnit

– ...

✔ JAX-RS / JBoss AS 7 managed

Extensions

JUnit

Persistence

JBehave

Selenium

Performance

Jacoco

Seam 2

Byteman

SpockTestNGJSFUnit

Extensions

Intégration sélénium

@RunWith(Arquillian.class)public class BasicClientTest {

@Drone DefaultSelenium browser;

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

Extensions

container

Test Enricher

Auxilliary Archive Appender

Archive ProcessorApplication

Deployable Container

AuxiliaryProtocol

Deployment Packager

Extensions maison

FW+

NAT

Extensions maison

ProtocolMetaData

HTTPContext

Server Address

FW Address

✔ NATExtension

Arquillian

Test d'intégration

In-container / As-client

Multi-conteneurs

Extensible

Références

http://jboss.org/arquillian

http://github.com/arquillian

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

http://slideshare.com/sewatech