arquillian : tester sur terre et dans les nuages

48
Alexis Hassler Tester sur terre et dans les nuages septembre 2012

Upload: alexis-hassler

Post on 14-May-2015

887 views

Category:

Technology


3 download

DESCRIPTION

Présentation au LavaJUG (Clermont-Ferrand), le 13 septembre 2012

TRANSCRIPT

Alexis Hassler

Testersur terre et dans les nuages

septembre 2012

@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

@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

– ...

Avec des donnés

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

@PersistenceContextEntityManager em;

@ResourceUserTransaction tx;

Injection

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")

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

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

[email protected]

http://sewatech.fr

?