tests d'intégration avec arquillian

Post on 14-May-2015

2.161 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

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

Arquillian

Alexis Hassler

@AlexisHassler

Arquillian

JavaEE

EJB

CDI

Servlet

JSP

JSFJMS

JAX-RSJAX-WS JPA

JNDI

Tests

Unitaire Intégration

Test unitaire

new

mock

✔ EJB

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 maisoncf. 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ème

1 conteneur par technologie

– Pas de mode embarqué universel

Mode remote + Maven

– pas dans le cycle de vie standard

Configurations spécifiques

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 composants,

pas uniquement les classes,

pas toute l'application

Mettre les

tests dans le conteneur

plutôt que gérer le

conteneur dans les tests

Structure d'un test

@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test

✔ EJB / OpenEJB

Conteneurs

JavaEE

– JBoss AS,

– GlassFish,

– Websphere AS

Web

– Jetty,

– Tomcat

CDI

– Weld SE,

– Weld EE,

– OpenWebBeans

EJB

– Apache OpenEJB

Conteneurs

ConteneurArquillian

JUnit

Test Case

ShrinkWrap

junit-container De

ploy

abl

eCon

tain

er

Conteneurs

Classpath

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

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

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

Architecture

ConteneurArquillian

JUnit

Test Case

ShrinkWrap

junit-container De

ploy

abl

eCon

tain

er

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

as-client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

Web Archive

Test case

JUnit

Arquillian

as-client

@ArquillianResource(MyServlet.class) URL baseURL ;

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

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

as-client

Utilisable pour du test fonctionnel

– selenium, htmlunit, httpunit,...

Drone

Intégration sélénium

@RunWith(Arquillian.class)public class BasicClientTest {

@Drone DefaultSelenium browser;

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

✔ JAX-RS / JBoss AS 7 managed

Arquillian

Test d'intégration

In-container

As-client

Multi-conteneurs

Références

http://jboss.org/arquillian

http://github.com/arquillian

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

Lundi 3 octobre17h00

top related