Alexis Hassler
Testersur terre et dans les nuages
novembre 2012
@AlexisHassler
Développeur, formateur Java
Indépendant
Co-leader du
AlexisHassler
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
Weld
Tomcat
OpenWebBeans
OpenEJB
Jetty
OSGi
Weblogic
Websphere
JBoss AS
Resin
Glassfish
TomEE
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 des composantspas des classes isolées
pas l'application complète
addAsManifestResource
Runner JUnit
Injection de dépendances
Méthode de test
Déploiement du composant
@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
➢ ...
Runners
JUnit SpockTestNG
Plug-ins
MavenEclipse
JBoss Forge
GradleIntelliJ
Byteman
Drone
Evolutions récentes
Android
Jacoco
Persistence
Portal
Performance
Seam 2Spring
Transaction
Warp
Graphene
JSFUnit
Selenium Rest
FluentLenium
Thucydides
NoSql
...
Avec des donnés
@Resource(mappedName="jdbc/sample")DataSource ds;
@PersistenceContextEntityManager em;
@ResourceUserTransaction tx;
Injection
Transaction Extension
@Transactional(TransactionMode.ROLLBACK)public class MyBeanTest
Persistence Extension
Initialisation
Vérification
@UsingDataSet("users.yml")
@ShouldMatchDataSet("expected-users.yml")
Dans Ton Cloud
Weblogic
Websphere
TomcatJetty
JBoss AS
Resin
Glassfish
TomEE
Dans Ton IaaS
TomcatJetty
Dans Ton PaaS
Cloudbees
OpenShift
Weblogic
Websphere
JBoss AS
Resin
Glassfish
TomEE
Conclusion
Arquillian
Test d'intégration
In-container / As-client
Multi-conteneurs
Extensible
Evolution
JavaEE et au-delà
Plus d'intégrations
Tests polyglottes
Références
http://arquillian.org
http://github.com/hasalex/arquillian-demo
http://slideshare.com/sewatech
?
Recommended