52
Alexis Hassler Tester sur terre et dans les nuages novembre 2012

Arquillian - YaJUG - nov. 2012

Embed Size (px)

Citation preview

Page 1: Arquillian - YaJUG - nov. 2012

Alexis Hassler

Testersur terre et dans les nuages

novembre 2012

Page 2: Arquillian - YaJUG - nov. 2012

@AlexisHassler

Développeur, formateur Java

Indépendant

Co-leader du

Page 3: Arquillian - YaJUG - nov. 2012

AlexisHassler

Page 4: Arquillian - YaJUG - nov. 2012

Kesako ?

Page 5: Arquillian - YaJUG - nov. 2012
Page 6: Arquillian - YaJUG - nov. 2012

Tests d'intégration JavaEE

Tests CDI / JavaEE 6

JBoss Harness

Page 7: Arquillian - YaJUG - nov. 2012

Problèmes ?

Page 8: Arquillian - YaJUG - nov. 2012

Tests

Unitaire Intégration

Page 9: Arquillian - YaJUG - nov. 2012

Test unitaire

mock

new

Page 10: Arquillian - YaJUG - nov. 2012

Test unitaire

ClassToBeTested

mockmock

mockmock

Page 11: Arquillian - YaJUG - nov. 2012

Test d'intégration

EjbToBeTested

EJBOther Bean

JPAEntityManager

JMSQueueCDI

Bean

TransactionSécurité

Intercepteurs

...

IntercepteursSécurité

Page 12: Arquillian - YaJUG - nov. 2012

Container

EjbToBeTested

EJBOther Bean

JPAEntityManager

JMSQueueCDI

Bean

TransactionSécurité

Intercepteurs

...

IntercepteursSécurité

Page 13: Arquillian - YaJUG - nov. 2012

Lifecycle

ComponentToBeTested

JAX-RS Endpoint

TestCase

Page 14: Arquillian - YaJUG - nov. 2012

Lifecycle

Compile

Test

Package

Integration Test

Page 15: Arquillian - YaJUG - nov. 2012

Solutions !

Page 16: Arquillian - YaJUG - nov. 2012

Conteneur

Page 17: Arquillian - YaJUG - nov. 2012

Conteneur

Mode embarqué

EJBContainer.createEJBContainer()

Context.lookup(...)

Page 18: Arquillian - YaJUG - nov. 2012

Conteneur

ServletServlet

JPA

CDI

JSF

JAX-RS

BeanValidation

Tran

sact

ion

JMS

EJB

Page 19: Arquillian - YaJUG - nov. 2012

gérer le conteneur dans les testsAucune référence au

conteneur

dans les tests

Page 20: Arquillian - YaJUG - nov. 2012

Runner JUnit

Méthode de test

Page 21: Arquillian - YaJUG - nov. 2012

Conteneur

ConteneurArquillianD

epl

oya

bleC

onta

iner

Page 22: Arquillian - YaJUG - nov. 2012

Conteneur

Weld

Tomcat

OpenWebBeans

OpenEJB

Jetty

OSGi

Weblogic

Websphere

JBoss AS

Resin

Glassfish

TomEE

Page 23: Arquillian - YaJUG - nov. 2012

gérer le conteneur dans les tests

Mettre les

tests dans le conteneur

plutôt que

gérer le conteneur dans les tests

Page 24: Arquillian - YaJUG - nov. 2012

Conteneur

Remote

Managed

Embedded

Page 25: Arquillian - YaJUG - nov. 2012

Injection de dépendances

Runner JUnit

Méthode de test

Page 26: Arquillian - YaJUG - nov. 2012

Tester des composantspas des classes isolées

pas l'application complète

Page 27: Arquillian - YaJUG - nov. 2012

addAsManifestResource

Page 28: Arquillian - YaJUG - nov. 2012

Runner JUnit

Injection de dépendances

Méthode de test

Déploiement du composant

Page 29: Arquillian - YaJUG - nov. 2012

@RunWith(Arquillian.class)

@Deployment

@EJB, @Inject, @Resource

@Test

Page 30: Arquillian - YaJUG - nov. 2012

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

Page 31: Arquillian - YaJUG - nov. 2012

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

Page 32: Arquillian - YaJUG - nov. 2012

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

Page 33: Arquillian - YaJUG - nov. 2012

Comme client

Page 34: Arquillian - YaJUG - nov. 2012

As Client

Web, JAX-RS, JAX-WS,

RMI, EJB remote,...

Web Archive

Test case

JUnit

Arquillian

Page 35: Arquillian - YaJUG - nov. 2012

As Client

URL servletURL ;

@Deploymentpublic static Archive createDeployment() {    ... }

@Testprivate void shouldDoX() {    ... }

@ArquillianResource(MyServlet.class) 

           (testable=false)

      @RunAsClient

Page 36: Arquillian - YaJUG - nov. 2012

As Client

Test fonctionnel

➢ Selenium

➢ HtmlUnit

➢ HttpUnit

➢ ...

Page 37: Arquillian - YaJUG - nov. 2012

Runners

JUnit SpockTestNG

Page 38: Arquillian - YaJUG - nov. 2012

Plug-ins

MavenEclipse

JBoss Forge

GradleIntelliJ

Page 39: Arquillian - YaJUG - nov. 2012

Byteman

Drone

Evolutions récentes

Android

Jacoco

Persistence

Portal

Performance

Seam 2Spring

Transaction

Warp

Graphene

JSFUnit

Selenium Rest

FluentLenium

Thucydides

NoSql

...

Page 40: Arquillian - YaJUG - nov. 2012

Avec des donnés

Page 41: Arquillian - YaJUG - nov. 2012

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

@PersistenceContextEntityManager em;

@ResourceUserTransaction tx;

Injection

Page 42: Arquillian - YaJUG - nov. 2012

Transaction Extension

@Transactional(TransactionMode.ROLLBACK)public class MyBeanTest

Page 43: Arquillian - YaJUG - nov. 2012

Persistence Extension

Initialisation

Vérification

@UsingDataSet("users.yml")

@ShouldMatchDataSet("expected-users.yml")

Page 44: Arquillian - YaJUG - nov. 2012

Dans Ton Cloud

Page 45: Arquillian - YaJUG - nov. 2012

Weblogic

Websphere

TomcatJetty

JBoss AS

Resin

Glassfish

TomEE

Dans Ton IaaS

Page 46: Arquillian - YaJUG - nov. 2012

TomcatJetty

Dans Ton PaaS

Cloudbees

OpenShift

Weblogic

Websphere

JBoss AS

Resin

Glassfish

TomEE

Page 47: Arquillian - YaJUG - nov. 2012

Conclusion

Page 48: Arquillian - YaJUG - nov. 2012

Arquillian

Test d'intégration

In-container / As-client

Multi-conteneurs

Extensible

Page 49: Arquillian - YaJUG - nov. 2012

Evolution

JavaEE et au-delà

Plus d'intégrations

Tests polyglottes

Page 50: Arquillian - YaJUG - nov. 2012

Références

http://arquillian.org

http://github.com/hasalex/arquillian-demo

http://slideshare.com/sewatech

Page 51: Arquillian - YaJUG - nov. 2012

@AlexisHassler

http://alexis-hassler.com

[email protected]

http://sewatech.fr

Page 52: Arquillian - YaJUG - nov. 2012

?