tests d'intégration avec arquillian

48
Arquillian Alexis Hassler

Upload: alexis-hassler

Post on 14-May-2015

2.161 views

Category:

Documents


4 download

DESCRIPTION

Présentation "Tests d'intégration JavaEE avec Arquillian" à SoftShake 2011 Avec 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 possibilités étaient limitées et qu’il 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 et JAX-RS sur JBoss et Glassfish.

TRANSCRIPT

Page 1: Tests d'intégration avec Arquillian

Arquillian

Alexis Hassler

Page 2: Tests d'intégration avec Arquillian

@AlexisHassler

Page 3: Tests d'intégration avec Arquillian

Arquillian

Page 4: Tests d'intégration avec Arquillian
Page 5: Tests d'intégration avec Arquillian

JavaEE

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

Page 6: Tests d'intégration avec Arquillian

Tests

Unitaire Intégration

Page 7: Tests d'intégration avec Arquillian

Test unitaire

new

mock

Page 8: Tests d'intégration avec Arquillian

✔ EJB

Page 9: Tests d'intégration avec Arquillian

Test d'intégration

Composant déployé dans son

conteneur

– Mode embarqué

– Déploiement distant

Page 10: Tests d'intégration avec Arquillian

EJB

Mode embarqué

EJBContainer.createEJBContainer()

Context.lookup(...)

Page 11: Tests d'intégration avec Arquillian

Spring Framework

Runner

– Démarrer l'ApplicationContext

@RunWith

@Autowired

Page 12: Tests d'intégration avec Arquillian

CDI

Weld SE

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

@RunWith

@Inject

Page 13: Tests d'intégration avec Arquillian

JPA

Conteneur JPA

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

Page 14: Tests d'intégration avec Arquillian

JMS

Conteneur autonome

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

Page 15: Tests d'intégration avec Arquillian

HTTP / Servlet / JSP / ...

Conteneur autonome

new ServletTester()

new HttpTester()

Page 16: Tests d'intégration avec Arquillian

✔ EJB / OpenEJB

Page 17: Tests d'intégration 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 18: Tests d'intégration avec Arquillian

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

JavaEE

Page 19: Tests d'intégration avec Arquillian

JavaEE

ServletServlet

JPA

CDI

JSF

JAX-RS

BeanValidation

Tran

sact

ion

JMS

EJB

Page 20: Tests d'intégration avec Arquillian

Tester les composants,

pas uniquement les classes,

pas toute l'application

Page 21: Tests d'intégration avec Arquillian

Mettre les

tests dans le conteneur

plutôt que gérer le

conteneur dans les tests

Page 22: Tests d'intégration avec Arquillian

Structure d'un test

@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test

Page 23: Tests d'intégration avec Arquillian

✔ EJB / OpenEJB

Page 24: Tests d'intégration avec Arquillian
Page 25: Tests d'intégration avec Arquillian

Conteneurs

JavaEE

– JBoss AS,

– GlassFish,

– Websphere AS

Web

– Jetty,

– Tomcat

CDI

– Weld SE,

– Weld EE,

– OpenWebBeans

EJB

– Apache OpenEJB

Page 26: Tests d'intégration avec Arquillian

Conteneurs

ConteneurArquillian

JUnit

Test Case

ShrinkWrap

junit-container De

ploy

abl

eCon

tain

er

Page 27: Tests d'intégration avec Arquillian

Conteneurs

Classpath

Profil maven

Page 28: Tests d'intégration avec Arquillian

✔ EJB / Glassfish Embedded✔ CDI / Glassfish Embedded

✔ CDI / Weld SE

Page 29: Tests d'intégration avec Arquillian

Conteneurs

Remote

Managed

Embedded

Page 30: Tests d'intégration 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 31: Tests d'intégration 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 32: Tests d'intégration 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 33: Tests d'intégration 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 34: Tests d'intégration avec Arquillian

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

Page 35: Tests d'intégration avec Arquillian

Architecture

ConteneurArquillian

JUnit

Test Case

ShrinkWrap

junit-container De

ploy

abl

eCon

tain

er

Page 36: Tests d'intégration avec Arquillian

Protocole Servlet

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

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Page 37: Tests d'intégration avec Arquillian

Protocole Servlet 3.0

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

Web Archive

Arquillian Servlet

Test case

JUnit

Arquillian

Page 38: Tests d'intégration avec Arquillian

Arquillian ear

Protocole Servlet 2.5

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

Java Archive

JUnit

Arquillian

Arquillian war

Arquillian Servlet

Test case

Page 39: Tests d'intégration 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 40: Tests d'intégration avec Arquillian

Protocole JMX-AS7

JBoss AS 7

Arquillian Service

Arquillian MBean

Any Archive

Test case

JUnit

Arquillian

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

Page 41: Tests d'intégration avec Arquillian

as-client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

Web Archive

Test case

JUnit

Arquillian

Page 42: Tests d'intégration avec Arquillian

as-client

@ArquillianResource(MyServlet.class) URL baseURL ;

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

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

Page 43: Tests d'intégration avec Arquillian

as-client

Utilisable pour du test fonctionnel

– selenium, htmlunit, httpunit,...

Page 44: Tests d'intégration 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 45: Tests d'intégration avec Arquillian

✔ JAX-RS / JBoss AS 7 managed

Page 46: Tests d'intégration avec Arquillian

Arquillian

Test d'intégration

In-container

As-client

Multi-conteneurs

Page 47: Tests d'intégration avec Arquillian

Références

http://jboss.org/arquillian

http://github.com/arquillian

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

Page 48: Tests d'intégration avec Arquillian

Lundi 3 octobre17h00