Un Alien en Bretagne



BreizhJUG
14/05/2012                   Alexis Hassler
@AlexisHassler

Développeur, formateur Java

Indépendant

Contributeur occasionnel à Arquillian

Co-leader du
Kesako ?
Tests d'intégration JavaEE


Tests CDI / JavaEE 6
 JBoss Harness
Problèmes ?
Tests

Unitaire           Intégration
Test unitaire




       new


       mock
Test unitaire


       mock             mock
                               mock
mock




          ClassToBeTested
Test d'intégration


                         JPA                      EJB
                   EntityManager               Other Bean
                                                                       JMS
CDI
                                                                      Queue
Bean
                                                                 Sécurité
   Intercepteurs




                             EjbToBeTested
                                   Sécurité
               Transaction                       Intercepteurs
                                         ...
Container
                         JPA                      EJB
                   EntityManager               Other Bean
                                                                       JMS
CDI
                                                                      Queue
Bean
                                                                 Sécurité
   Intercepteurs




                             EjbToBeTested
                                   Sécurité
               Transaction                       Intercepteurs
                                         ...
Lifecycle



               Component
               ToBeTested

              JAX-RS Endpoint




Test
Case
Lifecycle

Compile




          Test




                 Package




                     Integration Test
Solutions !
Conteneur
Conteneur

 Mode embarqué



EJBContainer.createEJBContainer()

Context.lookup(...)
Conteneur

                             JMS
       JAX-RS




                                    Transaction
                        EJB
Servlet
            CDI

                              JPA
 JSF
                  Bean
                Validation
Aucune référence au
gérer le conteneur dans les tests
      conteneur
        dans les tests
Runner JUnit




           Méthode 
           de test
Conteneur




             DeployableContainer
Arquillian                         Conteneur
Conteneur


        Websphere
                      JBoss AS
Weblogic
                 Glassfish
TomEE
          Resin
                                  Weld
                                   OpenWebBeans
         Jetty
           Tomcat                OpenEJB
Mettre les

tests dans le conteneur
 gérer le conteneur dans les tests
             plutôt que
 gérer le conteneur dans les tests
Conteneur


Remote

         Managed

                   Embedded
Runner JUnit




     Injection de dépendances


                  Méthode
                  de test
Tester les composants
    pas les classes isolées
   pas l'application complète
addAsManifestResource
Runner JUnit
                     Déploiement 
                     du composant



     Injection de dépendances



                      Méthode
                      de test
EJB, CDI, EJB+CDI / Glassfish Embedded
      EJB+CDI / JBoss Managed
@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test
Conteneur embarqué
Démarrage du conteneur
     (in-process)


         Déploiement de l'archive




                            Exécution locale du test


                                         Retrait de l'archive


                                                   Arrêt du conteneur
Conteneur géré
Démarrage du conteneur
    (out-process)


         Déploiement de l'archive


                    Déploiement du service
                           Arquillian

                                Exécution du test
                                dans le conteneur


                                         Retrait de l'archive


                                                    Arrêt du conteneur
Conteneur distant
      Conteneur
préalablement démarré


        Déploiement de l'archive


                  Déploiement du service
                         Arquillian

                               Exécution du test
                               dans le conteneur


                                        Retrait de l'archive
Comme client
As Client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

                Web Archive


  JUnit

Arquillian
Test case
As Client



@ArquillianResource(MyServlet.class) 
URL servletURL ;

           (testable=false)
@Deployment
public static Archive createDeployment() {
    ... 
}

      @RunAsClient
@Test
private void shouldDoX() {
    ... 
}
As Client

Test fonctionnel
– Selenium

– HtmlUnit

– HttpUnit

– ...
✔   JAX-RS
Avec des donnés
Injection



@Resource(mappedName="jdbc/sample")
DataSource ds;

                      @PersistenceContext
                      EntityManager em;

    @Resource
    UserTransaction tx;
✔   @Before
Extensions



  Performance    Persistence

Selenium                Byteman

JBehave                  Jacoco

 JSFUnit JUnit TestNG Spock
Persistence Extension




@Transactional(TransactionMode.ROLLBACK)
public class MyBeanTest
Persistence Extension

 Initialisation
@UsingDataSet("users.yml")


 Vérification
@ShouldMatchDataSet("expected-users.yml")
✔   @APE
Dans Ton Cloud
Dans Ton IaaS


        Websphere
Weblogic    JBoss AS
   Resin
         Glassfish
TomEE
                        Weld
         Jetty           OpenWebBeans
         Tomcat
                       OpenEJB
Dans Ton PaaS


        Websphere
Weblogic    JBoss AS   Cloudbees
   Resin                   OpenShift
         Glassfish
TomEE
                            Weld
         Jetty               OpenWebBeans
         Tomcat
                          OpenEJB
✔   Cloudbees
Conclusion
Arquillian

Test d'intégration

In-container / As-client

Multi-conteneurs

Extensible
Références

http://arquillian.org



http://github.com/hasalex/arquillian-demo
http://slideshare.com/sewatech
@AlexisHassler



http://alexis-hassler.com
alexis.hassler@sewatech.fr
http://sewatech.fr
?

Arquillian, un alien en Bretagne