Tests d'intégration avec Arquillian

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

×