cocktail d’expérience informatiques             Genève 3 & 4 octobre 2011                    Seconde édition              ...
Test dintégration       avec    Arquillian               Alexis Hassler
Arquillian         Alexis Hassler
@AlexisHassler
Arquillian
AlexisHassler
JavaEEJAX-WS     JAX-RS   JPAServlet            EJB     JNDI JSP            CDI     JMS JSF
TestsUnitaire           Intégration
Test unitaire       new       mock
✔   EJB
Test dintégrationComposant déployé dans sonconteneur–   Mode embarqué–   Déploiement distant
EJBMode embarquéEJBContainer.createEJBContainer()Context.lookup(...)
Spring FrameworkRunner–   Démarrer lApplicationContext                 @RunWith                 @Autowired
CDIWeld SE–   Runner maison    cf. http://blog.alexis-hassler.com/2011/01/junit-runner-pour-cdi-weld.html                 ...
JPA   Conteneur JPAPersistence.createEntityManagerFactory(...)           .createEntityManager()
JMS   Conteneur autonomenew ActiveMQConnectionFactory(        "vm://localhost?broker.persistent=false");
HTTP / Servlet / JSP / ...Conteneur autonome      new ServletTester()      new HttpTester()
✔   EJB / OpenEJB
Problème1 conteneur par technologie–   Pas de mode embarqué universelMode remote + Maven–   pas dans le cycle de vie stand...
JavaEEJAX-WS     JAX-RS   JPAServlet            EJB     JNDI JSP            CDI     JMS JSF
JavaEE                             JMS       JAX-RS                                    Transaction                        ...
Tester les composants,  pas uniquement les classes,     pas toute lapplication
Mettre lestests dans le conteneur      plutôt que gérer le    conteneur dans les tests
Structure dun test@RunWith(Arquillian.class)@Deployment@EJB, @Inject, @Resource@Test
✔   EJB / OpenEJB
ConteneursJavaEE                 CDI–   JBoss AS,           –   Weld SE,–   GlassFish,          –   Weld EE,–   Websphere ...
Conteneurs                                      DeployableContainerShrinkWrap                     Arquillian              ...
ConteneursClasspathProfil maven
✔   EJB / Glassfish Embedded✔   CDI / Glassfish Embedded       ✔   CDI / Weld SE
ConteneursRemote           Managed                      Embedded
Conteneur embarquéDémarrage du conteneur     (in-process)         Déploiement de larchive                            Exécu...
Conteneur géréDémarrage du conteneur    (out-process)         Déploiement de larchive                    Déploiement du se...
Conteneur distant      Conteneurpréalablement démarré        Déploiement de larchive                  Déploiement du servi...
Conteneurs                     Remote                Managed                 EmbeddedJBoss AS       4.2, 5.0, 5.1, 6.0, 7....
✔   EJB / JBoss AS 7 managed    ✔   EJB / JBoss AS 7 remote
Architecture                                      DeployableContainerShrinkWrap                     Arquillian            ...
Protocole Servlet                 ShrinkWrap.create(WebArchive.class)                           .addClasses(...);         ...
Protocole Servlet 3.0                   ShrinkWrap.create(JavaArchive.class)                             .addClasses(...);...
Protocole Servlet 2.5                   ShrinkWrap.create(JavaArchive.class)                             .addClasses(...);...
Protocole Servlet              ShrinkWrap.create(EnterpriseArchive.class)                        .addAsModule(jar);       ...
Protocole JMX-AS7                 ShrinkWrap.create(XxxArchive.class)                           .addClasses(...);         ...
✔   EJB / deploymentExportPath
as-clientWeb, JAX-RS, JAX-WS,RMI, EJB remote,...                Web Archive  JUnitArquillianTest case
as-client@ArquillianResource(MyServlet.class)URL baseURL ;@Deployment(testable=false)public static Archive createDeploymen...
as-clientUtilisable pour du test fonctionnel– selenium,   htmlunit, httpunit,...
Drone    Intégration sélénium@RunWith(Arquillian.class)public class BasicClientTest {    @Drone DefaultSelenium browser;  ...
✔   JAX-RS / JBoss AS 7 managed
ArquillianTest dintégrationIn-containerAs-clientMulti-conteneurs
Référenceshttp://jboss.org/arquillianhttp://github.com/arquillianhttp://github.com/hasalex/arquillian-demo
Lundi 3 octobre    17h00
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
Prochain SlideShare
Chargement dans…5
×

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

891 vues

Publié le

Alexis Hassler


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

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
891
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
24
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 1. cocktail d’expérience informatiques Genève 3 & 4 octobre 2011 Seconde édition soft-shake.chAuteur Alexis HASSLER Track JavaSession Test dintégration avec Arquillian
  2. 2. Test dintégration avec Arquillian Alexis Hassler
  3. 3. Arquillian Alexis Hassler
  4. 4. @AlexisHassler
  5. 5. Arquillian
  6. 6. AlexisHassler
  7. 7. JavaEEJAX-WS JAX-RS JPAServlet EJB JNDI JSP CDI JMS JSF
  8. 8. TestsUnitaire Intégration
  9. 9. Test unitaire new mock
  10. 10. ✔ EJB
  11. 11. Test dintégrationComposant déployé dans sonconteneur– Mode embarqué– Déploiement distant
  12. 12. EJBMode embarquéEJBContainer.createEJBContainer()Context.lookup(...)
  13. 13. Spring FrameworkRunner– Démarrer lApplicationContext @RunWith @Autowired
  14. 14. CDIWeld SE– Runner maison cf. http://blog.alexis-hassler.com/2011/01/junit-runner-pour-cdi-weld.html @RunWith @Inject
  15. 15. JPA Conteneur JPAPersistence.createEntityManagerFactory(...) .createEntityManager()
  16. 16. JMS Conteneur autonomenew ActiveMQConnectionFactory( "vm://localhost?broker.persistent=false");
  17. 17. HTTP / Servlet / JSP / ...Conteneur autonome new ServletTester() new HttpTester()
  18. 18. ✔ EJB / OpenEJB
  19. 19. Problème1 conteneur par technologie– Pas de mode embarqué universelMode remote + Maven– pas dans le cycle de vie standardConfigurations spécifiques
  20. 20. JavaEEJAX-WS JAX-RS JPAServlet EJB JNDI JSP CDI JMS JSF
  21. 21. JavaEE JMS JAX-RS Transaction EJBServlet CDI JPA JSF Bean Validation
  22. 22. Tester les composants, pas uniquement les classes, pas toute lapplication
  23. 23. Mettre lestests dans le conteneur plutôt que gérer le conteneur dans les tests
  24. 24. Structure dun test@RunWith(Arquillian.class)@Deployment@EJB, @Inject, @Resource@Test
  25. 25. ✔ EJB / OpenEJB
  26. 26. ConteneursJavaEE CDI– JBoss AS, – Weld SE,– GlassFish, – Weld EE,– Websphere AS – OpenWebBeansWeb EJB– Jetty, – Apache OpenEJB– Tomcat
  27. 27. Conteneurs DeployableContainerShrinkWrap Arquillian ConteneurTest Case junit-container JUnit
  28. 28. ConteneursClasspathProfil maven
  29. 29. ✔ EJB / Glassfish Embedded✔ CDI / Glassfish Embedded ✔ CDI / Weld SE
  30. 30. ConteneursRemote Managed Embedded
  31. 31. Conteneur embarquéDémarrage du conteneur (in-process) Déploiement de larchive Exécution locale du test Retrait de larchive Arrêt du conteneur
  32. 32. Conteneur géréDémarrage du conteneur (out-process) Déploiement de larchive Déploiement du service Arquillian Exécution du test dans le conteneur Retrait de larchive Arrêt du conteneur
  33. 33. Conteneur distant Conteneurpréalablement démarré Déploiement de larchive Déploiement du service Arquillian Exécution du test dans le conteneur Retrait de larchive
  34. 34. Conteneurs Remote Managed EmbeddedJBoss AS 4.2, 5.0, 5.1, 6.0, 7.0 4.2, 5.1, 6.0, 7.0 5.1, 6.0Glassfish 3.1 3.1Websphere AS 7.0 8.0Jetty 6.1, 7.0Tomcat 6.0 6.0Weld SE 1.1, SE 1.0, EE 1.1OpenWebBeans 1.0OpenEJB 3.1
  35. 35. ✔ EJB / JBoss AS 7 managed ✔ EJB / JBoss AS 7 remote
  36. 36. Architecture DeployableContainerShrinkWrap Arquillian ConteneurTest Case junit-container JUnit
  37. 37. Protocole Servlet ShrinkWrap.create(WebArchive.class) .addClasses(...); Web Archive JUnitArquillian Test case Arquillian Servlet
  38. 38. Protocole Servlet 3.0 ShrinkWrap.create(JavaArchive.class) .addClasses(...); Web Archive JUnitArquillian Test case Arquillian Servlet
  39. 39. Protocole Servlet 2.5 ShrinkWrap.create(JavaArchive.class) .addClasses(...); Arquillian ear Java Archive JUnitArquillian Test case Arquillian war Arquillian Servlet
  40. 40. Protocole Servlet ShrinkWrap.create(EnterpriseArchive.class) .addAsModule(jar); ShrinkWrap.create(JavaArchive.class) .addClasses(...); Enterprise Archive Java Archive JUnitArquillian Test case Arquillian war Arquillian Servlet
  41. 41. Protocole JMX-AS7 ShrinkWrap.create(XxxArchive.class) .addClasses(...); JBoss AS 7 Any Archive JUnitArquillian Test case Arquillian Service Arquillian MBean
  42. 42. ✔ EJB / deploymentExportPath
  43. 43. as-clientWeb, JAX-RS, JAX-WS,RMI, EJB remote,... Web Archive JUnitArquillianTest case
  44. 44. as-client@ArquillianResource(MyServlet.class)URL baseURL ;@Deployment(testable=false)public static Archive createDeployment() { ...}@Test@RunAsClientprivate void shouldDoX() { ...}
  45. 45. as-clientUtilisable pour du test fonctionnel– selenium, htmlunit, httpunit,...
  46. 46. Drone Intégration sélénium@RunWith(Arquillian.class)public class BasicClientTest { @Drone DefaultSelenium browser; @Test public void testLoginAndLogout() { browser.open(deploymentUrl + "home.jsp"); ... }}
  47. 47. ✔ JAX-RS / JBoss AS 7 managed
  48. 48. ArquillianTest dintégrationIn-containerAs-clientMulti-conteneurs
  49. 49. Référenceshttp://jboss.org/arquillianhttp://github.com/arquillianhttp://github.com/hasalex/arquillian-demo
  50. 50. Lundi 3 octobre 17h00

×