Tests d'intégration avec Arquillian

  • 2,021 views
Uploaded on

Présentation "Tests d'intégration JavaEE avec Arquillian" à SoftShake 2011 …

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.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,021
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
36
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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