jug summer camp - une nouvelle vision des tests avec arquillian

Download JUG Summer Camp - Une nouvelle vision des tests avec Arquillian

Post on 13-Dec-2014

246 views

Category:

Technology

4 download

Embed Size (px)

DESCRIPTION

La réalisation de tests unitaires est fondamentale pour développer des logiciels de qualité. Cependant, tout miser sur eux est illusoire, car il faudra à un moment ou un autre vérifier que les composants interagissent convenablement et que leur intégration dans l'environnement cible fonctionne comme prévu. De plus, si l'application fournit une interface graphique, il faut vérifier si les interactions avec celle-ce sont corrects. Arquillian est une plateforme qui est en train de révolutionner la façon de développer les tests d'intégration et fonctionnels dans le monde Java. Et malgré des défauts de jeunesse, Arquillian permet de faire des tests automatisés de composants et d'applications Java, depuis la persistance jusqu'à l'interface graphique, en couvrant un périmètre qui dépasse largement son cadre initial qui était Java EE. Lors de cette session, vous apprendrez comment Arquillian est capable de tester : - l'intégration de composants Java EE, sur différents serveurs d'applications, - le code de persistance avec l'extension APE, - les interfaces Web, en facilitant l'utilisation de Selenium. Présentation au JUG Summer Camp 2013 : http://www.jugsummercamp.com/edition/4/presentation/1073

TRANSCRIPT

  • 1. 1 Alexis Hassler Une nouvelle vision des tests avec septembre 2013
  • 2. 2 @AlexisHassler Dveloppeur, formateur Java Indpendant Co-leader du
  • 3. 3 Tests Unitaire Intgration
  • 4. 4 Test unitaire mockmock mock new ClassToBeTested() mock
  • 5. 5 Container EJB Other Bean JPA EntityManager CDI Bean Transaction Scurit Intercepteurs ... Intercepteurs Scurit BeanToBeDeployed JMS Queue
  • 6. 6 Container Mock
  • 7. 7 Container
  • 8. 8 Mock
  • 9. 9 Test d'intgration EJB Other Bean JPA EntityManager CDI Bean Transaction Scurit Intercepteurs ... Intercepteurs Scurit BeanToBeDeployed JMS Queue
  • 10. 10 Tests d'intgration JavaEE
  • 11. 11 Tester des composants pas des classes isoles pas l'application complte
  • 12. 12 Aucune rfrence au conteneur dans les tests
  • 13. 13 Weld Tomcat OpenWebBeans OpenEJB Jetty Weblogic Websphere JBoss AS Glassfish TomEE
  • 14. 14 Remote Managed Embedded
  • 15. 15 TomcatJetty Weblogic Websphere JBoss AS Glassfish TomEE
  • 16. 16 Cloudbees OpenShift TomcatJetty Weblogic Websphere JBoss AS Glassfish TomEE
  • 17. 17 Mettre les tests dans le conteneur plutt que grer le conteneur dans les tests
  • 18. 18 @RunWith(Arquillian.class) public class GreeterArqIT { @Deployment public static Archive deploy() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, Location.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void testGreet() throws Exception { String who = "World"; String expected = "Hi " + who; String actual = greeter.greet(who); assertEquals(expected, actual); } }
  • 19. 19 @RunWith(Arquillian.class) public class GreeterArqIT { @Deployment public static Archive deploy() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, Location.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void testGreet() throws Exception { String who = "World"; String expected = "Hi " + who; String actual = greeter.greet(who); assertEquals(expected, actual); } } Runner JUnit Mthode de test
  • 20. 20 @RunWith(Arquillian.class) public class GreeterArqIT { @Deployment public static Archive deploy() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, Location.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void testGreet() throws Exception { String who = "World"; String expected = "Hi " + who; String actual = greeter.greet(who); assertEquals(expected, actual); } } Injection de dpendance
  • 21. 21 @RunWith(Arquillian.class) public class GreeterArqIT { @Deployment public static Archive deploy() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, Location.class) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } @Inject Greeter greeter; @Test public void testGreet() throws Exception { String who = "World"; String expected = "Hi " + who; String actual = greeter.greet(who); assertEquals(expected, actual); } } Dploiement du composant
  • 22. 22 @Deployment public static Archive deploy() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, Location.class) .addAsResource("config.properties") .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } 1. Crer l'archive
  • 23. 23 @Deployment public static Archive deploy() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, Location.class) .addAsResource("config.properties") .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } 2. Ajouter du contenu
  • 24. 24 @Deployment public static Archive deploy() { return ShrinkWrap.create(JavaArchive.class) .addClasses(Greeter.class, Location.class) .addAsResource("config.properties") .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); } 3. Dployer
  • 25. 25 @Deployment public static Archive deploy() { File[] requiredLibraries = Maven.resolver() .loadPomFromFile("pom.xml") .importRuntimeAndTestDependencies() .resolve() .withTransitivity() .asFile(); return ShrinkWrap .create(WebArchive.class) ... .addAsLibraries(requiredLibraries); } Rsolution de dpendances Maven
  • 26. 26 @RunWith(Arquillian.class) @Deployment @EJB, @Inject, @Resource @Test
  • 27. 27 Avec des donnes
  • 28. 28 @PersistenceContext EntityManager em; @Resource UserTransaction tx; Injection @Resource(mappedName="java:/jdbc/sample") DataSource ds;
  • 29. 29 Transaction Extension @Transactional(TransactionMode.ROLLBACK) public class GreeterFromDatabaseIT { ... }
  • 30. 30 Persistence Extension @UsingDataSet("msg1.yml") @ShouldMatchDataSet( value="expected-msg.yml", excludeColumns="id")
  • 31. 31 Comme client
  • 32. 32 @RunWith(Arquillian.class) public class GreeterArqIT { @Deployment(testable=false) public static Archive deploy() { ... } @ArquillianResource URL deploymentUrl; @Test public void should_request_get_result() { ... } }
  • 33. 33 @RunWith(Arquillian.class) public class GreeterArqIT { @Deployment(testable=false) public static Archive deploy() { ... } @ArquillianResource URL deploymentUrl; @Test public void should_request_get_result() { ... } } Dploiement SANS les tests
  • 34.