soft-shake.ch - tests d'intégration javaee avec arquillian

53
cocktail d’expérience informatiques Genève 3 & 4 octobre 2011 Seconde édition Track Auteur Session Java Alexis HASSLER Test d'intégration avec Arquillian soft -shake.ch

Upload: soft-shakech

Post on 14-May-2015

601 views

Category:

Technology


5 download

DESCRIPTION

Alexis HasslerAvec les EJB 3, on a beaucoup mis en avant leur caractère POJO qui facilite la mise en oeuvre de tests unitaires ainsi que le conteneur autonome pour des tests d’intégration. On a vite constaté que ces possiblités étaient limitée et qu’ils manquait un outil dans cet ensemble.Les équipes de JBoss nous proposent Arquillian. Cet outil est capable de piloter les serveurs d’applications, d’y déployer des archives et de tester toute sorte de composant JavaEE dans leur jus, avec un effort minimal.Cette session est très pratique, elle montre comment utiliser Arquillian pour les tests d’intégration CDI, EJB, JPA, sur JBoss, Glassfish et Tomcat.http://soft-shake.ch/2011/conference/sessions/java/2011/09/06/arquillian.html

TRANSCRIPT

Page 1: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

cocktail d’expérience informatiquesGenève 3 & 4 octobre 2011

Seconde édition

Track

Auteur

Session

Java

Alexis HASSLER

Test d'intégrationavec Arquillian

soft-shake.ch

Page 2: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
Page 3: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Test d'intégrationavec

Arquillian

Alexis Hassler

Page 4: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Arquillian

Alexis Hassler

Page 5: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

@AlexisHassler

Page 6: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Arquillian

Page 7: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
Page 8: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

AlexisHassler

Page 9: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

JavaEE

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

Page 10: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Tests

Unitaire Intégration

Page 11: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Test unitaire

new

mock

Page 12: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

✔ EJB

Page 13: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Test d'intégration

Composant déployé dans son

conteneur

– Mode embarqué

– Déploiement distant

Page 14: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

EJB

Mode embarqué

EJBContainer.createEJBContainer()

Context.lookup(...)

Page 15: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Spring Framework

Runner

– Démarrer l'ApplicationContext

@RunWith

@Autowired

Page 16: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

CDI

Weld SE

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

@RunWith

@Inject

Page 17: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

JPA

Conteneur JPA

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

Page 18: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

JMS

Conteneur autonome

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

Page 19: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

HTTP / Servlet / JSP / ...

Conteneur autonome

new ServletTester()

new HttpTester()

Page 20: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

✔ EJB / OpenEJB

Page 21: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Problème

1 conteneur par technologie

– Pas de mode embarqué universel

Mode remote + Maven

– pas dans le cycle de vie standard

Configurations spécifiques

Page 22: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

JavaEE

Page 23: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

JavaEE

ServletServlet

JPA

CDI

JSF

JAX-RS

BeanValidation

Tran

sact

ion

JMS

EJB

Page 24: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Tester les composants,

pas uniquement les classes,

pas toute l'application

Page 25: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Mettre les

tests dans le conteneur

plutôt que gérer le

conteneur dans les tests

Page 26: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Structure d'un test

@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test

Page 27: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

✔ EJB / OpenEJB

Page 28: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
Page 29: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Conteneurs

JavaEE

– JBoss AS,

– GlassFish,

– Websphere AS

Web

– Jetty,

– Tomcat

CDI

– Weld SE,

– Weld EE,

– OpenWebBeans

EJB

– Apache OpenEJB

Page 30: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Conteneurs

ConteneurArquillian

JUnit

Test Case

ShrinkWrap

junit-container De

ploy

abl

eCon

tain

er

Page 31: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Conteneurs

Classpath

Profil maven

Page 32: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

✔ EJB / Glassfish Embedded✔ CDI / Glassfish Embedded

✔ CDI / Weld SE

Page 33: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Conteneurs

Remote

Managed

Embedded

Page 34: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

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 35: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

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 36: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

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 37: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Conteneurs

Remote Managed Embedded

JBoss AS 4.2, 5.0, 5.1, 6.0, 7.0 4.2, 5.1, 6.0, 7.0 5.1, 6.0

Glassfish 3.1 3.1

Websphere AS 7.0 8.0

Jetty 6.1, 7.0

Tomcat 6.0 6.0

Weld SE 1.1, SE 1.0, EE 1.1

OpenWebBeans 1.0

OpenEJB 3.1

Page 38: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

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

Page 39: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Architecture

ConteneurArquillian

JUnit

Test Case

ShrinkWrap

junit-container De

ploy

abl

eCon

tain

er

Page 40: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Protocole Servlet

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

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Page 41: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Protocole Servlet 3.0

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

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Page 42: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Arquillian ear

Protocole Servlet 2.5

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

Java Archive

JUnit

Arquillian

Arquillian war

Arquillian Servlet

Test case

Page 43: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

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 44: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Protocole JMX-AS7

JBoss AS 7

Arquillian Service

Arquillian MBean

Any Archive

Test case

JUnit

Arquillian

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

Page 45: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

✔ EJB / deploymentExportPath

Page 46: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

as-client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

Web Archive

Test case

JUnit

Arquillian

Page 47: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

as-client

@ArquillianResource(MyServlet.class) URL baseURL ;

@Deployment(testable=false)public static Archive createDeployment() { ... }

@Test@RunAsClientprivate void shouldDoX() { ... }

Page 48: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

as-client

Utilisable pour du test fonctionnel

– selenium, htmlunit, httpunit,...

Page 49: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Drone

Intégration sélénium

@RunWith(Arquillian.class)public class BasicClientTest {

@Drone DefaultSelenium browser;

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

Page 50: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

✔ JAX-RS / JBoss AS 7 managed

Page 51: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Arquillian

Test d'intégration

In-container

As-client

Multi-conteneurs

Page 52: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Références

http://jboss.org/arquillian

http://github.com/arquillian

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

Page 53: soft-shake.ch - Tests d'intégration JavaEE avec Arquillian

Lundi 3 octobre17h00