arquillian - ippevent 01/2012
TRANSCRIPT
ArquillianIppevent 19/01/2012
Alexis Hassler
Arquillian
@AlexisHassler
JavaEE
EJB
CDI
Servlet
JSP
JSFJMS
JAX-RSJAX-WS JPA
JNDI
Tests
Unitaire Intégration
Test unitaire
ClassToBeTested
Test unitaire
mock
new
✔ EJB
Test d'intégration
EjbToBeTested
TransactionSécurité
Intercepteurs
...
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 maison
cf. 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èmes
1 conteneur par technologie
– Pas de mode embarqué universel
Configurations spécifiques
Mode remote + Maven
– pas dans le cycle de vie standard
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 composantspas les classes isolées
pas toute l'application
gérer le conteneur dans les tests
Mettre les
tests dans le conteneur
plutôt que
Structure d'un test
@RunWith(Arquillian.class)
@Deployment
@EJB, @Inject, @Resource
@Test
✔ EJB / OpenEJB
addAsManifestResource
Conteneurs
WebLogic Cloudbees
OpenShift
Weld
Websphere
Tomcat
OpenWebBeans
OpenEJB
Jetty
JBoss AS
Resin Glassfish
Conteneurs
ConteneurArquillianD
epl
oya
bleC
onta
iner
Conteneurs
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
✔ EJB / JBoss AS 7 managed✔ EJB / JBoss AS 7 remote
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
URL servletURL ;
@Deploymentpublic static Archive createDeployment() { ... }
@Testprivate void shouldDoX() { ... }
@ArquillianResource(MyServlet.class)
(testable=false)
@RunAsClient
as-client
Utilisable pour du test fonctionnel
– Selenium
– HtmlUnit
– HttpUnit
– ...
✔ JAX-RS / JBoss AS 7 managed
Extensions
JUnit
Persistence
JBehave
Selenium
Performance
Jacoco
Seam 2
Byteman
SpockTestNGJSFUnit
Extensions
Intégration sélénium
@RunWith(Arquillian.class)public class BasicClientTest {
@Drone DefaultSelenium browser;
@Test public void testLoginAndLogout() { browser.open(deploymentUrl + "home.jsp"); ... }}
Extensions
container
Test Enricher
Auxilliary Archive Appender
Archive ProcessorApplication
Deployable Container
AuxiliaryProtocol
Deployment Packager
Extensions maison
FW+
NAT
Extensions maison
ProtocolMetaData
HTTPContext
Server Address
FW Address
✔ NATExtension
Arquillian
Test d'intégration
In-container / As-client
Multi-conteneurs
Extensible
Références
http://jboss.org/arquillian
http://github.com/arquillian
http://github.com/hasalex/arquillian-demo
http://slideshare.com/sewatech