Arquillian         Alexis Hassler
@AlexisHassler
Arquillian
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(...);         ...
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
Tests d'intégration avec Arquillian
Tests d'intégration avec Arquillian
Prochain SlideShare
Chargement dans…5
×

Tests d'intégration avec Arquillian

2 650 vues

Publié le

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.

0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

Aucune remarque pour cette diapositive

Tests d'intégration avec Arquillian

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

×