Post on 14-May-2015
description
transcript
Un Alien en Bretagne
14/05/2012 Alexis Hassler
BreizhJUG
@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
mock
new
Test unitaire
ClassToBeTested
mockmock
mockmock
Test d'intégration
EjbToBeTested
EJBOther Bean
JPAEntityManager
JMSQueueCDI
Bean
TransactionSécurité
Intercepteurs
...
IntercepteursSécurité
Container
EjbToBeTested
EJBOther Bean
JPAEntityManager
JMSQueueCDI
Bean
TransactionSécurité
Intercepteurs
...
IntercepteursSécurité
Lifecycle
ComponentToBeTested
JAX-RS Endpoint
TestCase
Lifecycle
Compile
Test
Package
Integration Test
Solutions !
Conteneur
Conteneur
Mode embarqué
EJBContainer.createEJBContainer()
Context.lookup(...)
Conteneur
ServletServlet
JPA
CDI
JSF
JAX-RS
BeanValidation
Tran
sact
ion
JMS
EJB
gérer le conteneur dans les testsAucune référence au
conteneur
dans les tests
Runner JUnit
Méthode de test
Conteneur
ConteneurArquillianD
epl
oya
bleC
onta
iner
Conteneur
Weblogic
Weld
Websphere
Tomcat
OpenWebBeans
OpenEJB
Jetty
JBoss AS
Resin
GlassfishTomEE
gérer le conteneur dans les tests
Mettre les
tests dans le conteneur
plutôt que
gérer le conteneur dans les tests
Conteneur
Remote
Managed
Embedded
Injection de dépendances
Runner JUnit
Méthode de test
Tester les composantspas les classes isolées
pas l'application complète
addAsManifestResource
Runner JUnit
Injection de dépendances
Méthode de test
Déploiement du composant
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
Conteneurpré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
Test case
JUnit
Arquillian
As Client
URL servletURL ;
@Deploymentpublic static Archive createDeployment() { ... }
@Testprivate void shouldDoX() { ... }
@ArquillianResource(MyServlet.class)
(testable=false)
@RunAsClient
As Client
Test fonctionnel
– Selenium
– HtmlUnit
– HttpUnit
– ...
✔ JAX-RS
Avec des donnés
@Resource(mappedName="jdbc/sample")DataSource ds;
@PersistenceContextEntityManager em;
@ResourceUserTransaction tx;
Injection
✔ @Before
Extensions
JUnit
Persistence
JBehave
Selenium
Performance
Jacoco
Byteman
SpockTestNGJSFUnit
Persistence Extension
@Transactional(TransactionMode.ROLLBACK)public class MyBeanTest
Persistence Extension
Initialisation
Vérification
@UsingDataSet("users.yml")
@ShouldMatchDataSet("expected-users.yml")
✔ @APE
Dans Ton Cloud
Dans Ton IaaS
Weld
OpenWebBeans
OpenEJB
WeblogicWebsphere
Tomcat
Jetty
JBoss ASResin
GlassfishTomEE
Dans Ton PaaS
Weblogic Cloudbees
OpenShift
Weld
Websphere
Tomcat
OpenWebBeans
OpenEJB
Jetty
JBoss ASResin
GlassfishTomEE
✔ 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
?