soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
-
Upload
soft-shakech -
Category
Technology
-
view
600 -
download
5
description
Transcript of soft-shake.ch - Tests d'intégration JavaEE avec Arquillian
cocktail d’expérience informatiquesGenève 3 & 4 octobre 2011
Seconde édition
Track
Auteur
Session
Java
Alexis HASSLER
Test d'intégrationavec Arquillian
soft-shake.ch
Test d'intégrationavec
Arquillian
Alexis Hassler
Arquillian
Alexis Hassler
@AlexisHassler
Arquillian
AlexisHassler
JavaEE
EJB
CDI
Servlet
JSP
JSFJMS
JAX-RSJAX-WS JPA
JNDI
Tests
Unitaire Intégration
Test unitaire
new
mock
✔ EJB
Test d'intégration
Composant déployé dans son
conteneur
– Mode embarqué
– Déploiement distant
EJB
Mode embarqué
EJBContainer.createEJBContainer()
Context.lookup(...)
Spring Framework
Runner
– Démarrer l'ApplicationContext
@RunWith
@Autowired
CDI
Weld SE
– Runner maisoncf. http://blog.alexis-hassler.com/2011/01/junit-runner-pour-cdi-weld.html
@RunWith
@Inject
JPA
Conteneur JPA
Persistence.createEntityManagerFactory(...) .createEntityManager()
JMS
Conteneur autonome
new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
HTTP / Servlet / JSP / ...
Conteneur autonome
new ServletTester()
new HttpTester()
✔ EJB / OpenEJB
Problème
1 conteneur par technologie
– Pas de mode embarqué universel
Mode remote + Maven
– pas dans le cycle de vie standard
Configurations spécifiques
EJB
CDI
Servlet
JSP
JSFJMS
JAX-RSJAX-WS JPA
JNDI
JavaEE
JavaEE
ServletServlet
JPA
CDI
JSF
JAX-RS
BeanValidation
Tran
sact
ion
JMS
EJB
Tester les composants,
pas uniquement les classes,
pas toute l'application
Mettre les
tests dans le conteneur
plutôt que gérer le
conteneur dans les tests
Structure d'un test
@RunWith(Arquillian.class)
@Deployment
@EJB, @Inject, @Resource
@Test
✔ EJB / OpenEJB
Conteneurs
JavaEE
– JBoss AS,
– GlassFish,
– Websphere AS
Web
– Jetty,
– Tomcat
CDI
– Weld SE,
– Weld EE,
– OpenWebBeans
EJB
– Apache OpenEJB
Conteneurs
ConteneurArquillian
JUnit
Test Case
ShrinkWrap
junit-container De
ploy
abl
eCon
tain
er
Conteneurs
Classpath
Profil maven
✔ EJB / Glassfish Embedded✔ CDI / Glassfish Embedded
✔ CDI / Weld SE
Conteneurs
Remote
Managed
Embedded
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
Conteneurs
Remote Managed Embedded
JBoss AS 4.2, 5.0, 5.1, 6.0, 7.0 4.2, 5.1, 6.0, 7.0 5.1, 6.0
Glassfish 3.1 3.1
Websphere AS 7.0 8.0
Jetty 6.1, 7.0
Tomcat 6.0 6.0
Weld SE 1.1, SE 1.0, EE 1.1
OpenWebBeans 1.0
OpenEJB 3.1
✔ EJB / JBoss AS 7 managed✔ EJB / JBoss AS 7 remote
Architecture
ConteneurArquillian
JUnit
Test Case
ShrinkWrap
junit-container De
ploy
abl
eCon
tain
er
Protocole Servlet
ShrinkWrap.create(WebArchive.class) .addClasses(...);
Web Archive
Arquillian Servlet
Test case
JUnit
Arquillian
Protocole Servlet 3.0
ShrinkWrap.create(JavaArchive.class) .addClasses(...);
Web Archive
Arquillian Servlet
Test case
JUnit
Arquillian
Arquillian ear
Protocole Servlet 2.5
ShrinkWrap.create(JavaArchive.class) .addClasses(...);
Java Archive
JUnit
Arquillian
Arquillian war
Arquillian Servlet
Test case
Protocole Servlet
Enterprise Archive
ShrinkWrap.create(JavaArchive.class) .addClasses(...);
Java Archive
JUnit
Arquillian
Arquillian war
Arquillian Servlet
Test case
ShrinkWrap.create(EnterpriseArchive.class) .addAsModule(jar);
Protocole JMX-AS7
JBoss AS 7
Arquillian Service
Arquillian MBean
Any Archive
Test case
JUnit
Arquillian
ShrinkWrap.create(XxxArchive.class) .addClasses(...);
✔ EJB / deploymentExportPath
as-client
Web, JAX-RS, JAX-WS,
RMI, EJB remote,...
Web Archive
Test case
JUnit
Arquillian
as-client
@ArquillianResource(MyServlet.class) URL baseURL ;
@Deployment(testable=false)public static Archive createDeployment() { ... }
@Test@RunAsClientprivate void shouldDoX() { ... }
as-client
Utilisable pour du test fonctionnel
– selenium, htmlunit, httpunit,...
Drone
Intégration sélénium
@RunWith(Arquillian.class)public class BasicClientTest {
@Drone DefaultSelenium browser;
@Test public void testLoginAndLogout() { browser.open(deploymentUrl + "home.jsp"); ... }}
✔ JAX-RS / JBoss AS 7 managed
Arquillian
Test d'intégration
In-container
As-client
Multi-conteneurs
Références
http://jboss.org/arquillian
http://github.com/arquillian
http://github.com/hasalex/arquillian-demo
Lundi 3 octobre17h00