SlideShare a Scribd company logo
Real Java EE Testing with
Arquillian and ShrinkWrap


                            Don't fake it!




Dan Allen
Senior Software Engineer
JBoss, by Red Hat
Who am I?

    ●   Author of Seam in Action, Manning 2008
    ●   Seam Community Liaison
    ●   Weld, Seam & Arquillian project member
    ●   JSR-314 (JSF 2) EG representative
    ●   Open Source advocate



                                                                           mojavelinux



2                  Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Agenda                                                           #testrevolution

    ●   Testing, what's the problem?
    ●   Integration testing challenges
    ●   A component model for tests
    ●   ShrinkWrap
    ●   Arquillian
    ●   Case study




3                    Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Why don't we test?




4   Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
5   Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Common integration testing challenges

    ●   Active mocks to stand in for collaborators
    ●   Configure application to use test data source(s)
    ●   Deal with (lack of) classpath isolation
    ●   Run a build to create/deploy application archive




6                    Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Skip the Build!
                                                         Test in-container!




7   Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
container

    n. manages a runtime environment and provides resources,
    a component model and a set of services




8               Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
A component
                                                         model for tests




9   Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Unit tests vs integration tests

 Unit                                                 Integration
     ●   Fine-grained                                  ●   Coarse-grained
     ●   Simple                                        ●   Complex
     ●   Test single API call                          ●   Test intricate web of calls
     ●   Fast, fast, fast                              ●   Sloooooooow
     ●   Easily run in an IDE                          ●   Run in an IDE? How?




10                     Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Testing bandgap and compounding effort




                                                                                    Functional complexity

                                                                                    Thought and effort




     Unit Tests                 Integration Tests                           Functional Tests


11                Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Testing continuum with Arquillian




                                                                                    Functional complexity

                                                                                    Thought and effort




     Unit Tests                 Integration Tests                           Functional Tests


12                Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
In-container approach to integration testing

     ●   Separate container process
     ●   Test deployed as archive
     ●   Test runs in-container
     ●   Results collected remotely




13                   Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Weighing in-container testing

 Pros                                              Cons
     ●   Rely on shared memory                      ●   Lack of isolation
     ●   Pass-by-reference                          ●   Environment not “true”
     ●   Don't need remote views
     ●   Managed concurrency




14                  Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Don't tie your tests to a build!

     ●   Extra, external setup
     ●   Adds time to tests
     ●   Coarse-grained packaging




15                   Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
n. a simple, Apache-licensed Java API for assembling archives
     like JARs, WARs, EARs; developed by the JBoss Community




16             Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Benefits of ShrinkWrap

     ●   IDE incremental compilation
          ●   Save and re-run
          ●   Skip the build!
     ●   Simple API
     ●   Tooling views
     ●   Export and debugging
     ●   Micro-deployments




17                      Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Fluent archive creation
     final JavaArchive archive = ShrinkWrap.create("slsb.jar", JavaArchive.class)
         .addClasses(Greeter.class, GreeterBean.class);
     System.out.println(archive.toString(true));


 Yields output:
     slsb.jar:
     /com/
     /com/acme/
     /com/acme/app/
     /com/acme/app/ejb3/
     /com/acme/app/ejb3/Greeter.class
     /com/acme/app/ejb3/GreeterBean.class




18                       Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Architecture overview




19          Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
n. a simple, Apache-licensed test harness that abstracts away
     container lifecycle and deployment from test logic so developers
     can easily develop a broad range of integration tests for their
     enterprise Java applications; developed by the JBoss Community




20             Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
The mission of the Arquillian project is to...




          Make integration testing a breeze!




21           Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Prove it!
     @RunWith(Arquillian.class)
     public class GreeterTestCase {
      @Deployment
      public static JavaArchive createTestArchive() {
        return ShrinkWrap.create("test.jar", JavaArchive.class)
          .addClasses(Greeter.class, GreeterBean.class);
      }

         @EJB private Greeter greeter;

         @Test
         public void shouldBeAbleToInjectEJB() throws Exception {
           assertEquals("Hello, Earthlings", greeter.greet("Earthlings"));
         }
     }


22                          Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Arquillian guts the plumbing

     ●   Manages lifecycle of container
          ●   start/stop
          ●   bind/unbind
     ●   Enriches test class (e.g, @Inject, @EJB, @Resource)
     ●   Bundles test archive
          ●   code under test
          ●   libraries
          ●   test class and invoker (in-container run mode only)
     ●   Negotiates deployment of test archive
     ●   Captures test results and failures
23                         Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Benefits of Arquillian

     ●   Write less (test) code
     ●   As much or as little “integration” as you need
     ●   Looks like a unit test, get fully functioning components
     ●   Simple way to get an instance of component under test
     ●   You don't hesitate when you need a resource
     ●   Same test, multiple containers
     ●   It's the real deal!




24                     Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Test frameworks




           JUnit                                     TestNG
              >= 4.6                                        >= 5.10




25         Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Test archives

     ●   Built using ShrinkWrap API
     ●   Bundle:
          ●   code under test
          ●   dependent Libraries
          ●   test class and invoker (in-container run mode only)
     ●   Deployed to container before test is executed
     ●   Undeployed after test is executed




26                      Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Build, what build?
     @Deployment
     public static JavaArchive createTestArchive() {
       return ShrinkWrap.create("test.jar", JavaArchive.class)
         .addClasses(Greeter.class, GreeterBean.class);
     }




27                       Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Skip the build!
     @Deployment
     public static JavaArchive createTestArchive() {
       return ShrinkWrap.create("test.jar", JavaArchive.class)
         .addPackage(TranslateController.class.getPackage())
         .addManifestResource(
           new ByteArrayAsset("<beans/>".getBytes()),
           ArchivePaths.create("beans.xml"));
     }




28                       Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Micro deployments

     ●   Deploy components in isolation
     ●   Test one slice at a time
     ●   Don't need to wait for full application build/startup
     ●   Tune size of integration
          ●   Layers by inclusion
          ●   No “big bang”




29                      Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Containers

     ●   Mode
     ●   Capability




30                    Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Container modes

     ●   Embedded
         ●   Same JVM as test runner
         ●   Tests executed by native test runner
         ●   Lifecycle controlled by Arquillian
     ●   Remote
         ●   Separate JVM from test runner
         ●   Tests executed over remote protocol
         ●   Arquillian likely binds to ports




31                      Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Container capabilities

     ●   Java EE application server (JBoss AS, GlassFish, etc)
     ●   Servlet container (Tomcat, Jetty)
     ●   Managed bean container (Weld SE, Spring)
     ●   OSGi
     ●   SPI allows you to introduce any other container




32                   Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Not just for Java EE
     public interface DeployableContainer {

         void setup(Context context, Configuration configuration);

         void start(Context context) throws LifecycleException;

         ContainerMethodExecutor deploy(Context context, Archive<?> archive)
            throws DeploymentException;

         void undeploy(Context context, Archive<?> archive)
            throws DeploymentException;

         void stop(Context context) throws LifecycleException;

     }


33                         Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Test enrichment

     ●   Injection
          ●   Fields & method arguments
          ●   @Inject, @Resource, @EJB, etc.
     ●   Contexts
          ●   Request & Conversation  Test method
          ●   Session  Test class
          ●   Application  Test class
     ●   Interceptors & decorators



34                      Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Test run modes

     ●   In-container
          ●   Test bundled in @Deployment archive
          ●   Archive deployed to container
          ●   Test runs inside container with code under test
          ●   Test invokes code under test directly (same JVM)
     ●   Local
          ●   @Deployment archive unmodified
          ●   Archive deployed to the container
          ●   Test runs in original test runner
          ●   Test interacts as a remote client (e.g., HTTP client)

35                       Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
In-container testing MDBs: A case study

     ●   Asynchronous
          ●   How will client know server is done processing?
          ●   Thread.sleep() is prone to transient failures
     ●   No return value
          ●   How do we check post-conditions?


     ●   In-container == same JVM
          ●   Gives test control
          ●   Allows test to inspect contexts


36                      Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Arquillian is...

     ●   an innovative approach to testing
     ●   a component model for tests
     ●   test infrastructure & plumbing
     ●   a set of container implementations
     ●   a little bit of magic ;)




37                     Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
JBoss Testing Initiative

     ●   Comprehensive testing tool “stack”
     ●   Establish a testing culture in Java EE
          ●   #jbosstesting on irc.freenode.net
     ●   Filling voids
          ●   ShrinkWrap – Programmatic archive creation
          ●   Arquillian – Managed integration testing
          ●   Placeebo – Mock Java EE API implementations
          ●   JSFUnit – Gray-box JSF testing
          ●   Contribute to the unit testing frameworks?


38                       Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Get Involved!

     ●   Active and open community
     ●   How to contribute:
          ●   Ideas on forums or IRC
          ●   Feedback on releases – still in alpha!
          ●   Enhancements and bug fixes – we love patches!
          ●   Documentation
          ●   Blogs – share your stories!
     ●   Come meet us:
          ●   http://jboss.org/arquillian
          ●   #jbosstesting on irc.freenode.net

39                       Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
http://jboss.org/arquillian




40                 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
Q&A                  http://jboss.org/arquillian
                     http://jboss.org/shrinkwrap




Dan Allen
Senior Software Engineer
JBoss, by Red Hat

More Related Content

PPT
Arquillian - Integration Testing Made Easy
PPTX
Arquillian
PDF
Arquillian : An introduction
ODP
Testing JSF with Arquillian and Selenium
PDF
Arquillian: Effective tests from the client to the server
PDF
Arquillian: Helping web developers and QA get along
PPTX
Test it! Unit, mocking and in-container Meet Arquillian!
PPTX
Testing Java EE apps with Arquillian
Arquillian - Integration Testing Made Easy
Arquillian
Arquillian : An introduction
Testing JSF with Arquillian and Selenium
Arquillian: Effective tests from the client to the server
Arquillian: Helping web developers and QA get along
Test it! Unit, mocking and in-container Meet Arquillian!
Testing Java EE apps with Arquillian

What's hot (20)

PDF
Test Dependencies and the Future of Build Acceleration
PDF
September 2010 - Arquillian
PDF
Testing Spring Boot Applications
PDF
Testing with Spring: An Introduction
PDF
Integration testing - A&BP CC
PDF
Create an architecture for web test automation
PDF
Prod-Like Integration Testing for Distributed Containerized Applications
PDF
Unit testing - A&BP CC
PDF
Testing Web Apps with Spring Framework
PDF
How To Use Selenium Successfully (Java Edition)
PPTX
JavaLand - Integration Testing How-to
PPT
Testing Java Web Apps With Selenium
PDF
Hadoop Summit 2013 : Continuous Integration on top of hadoop
PPTX
Spring Framework 3.2 - What's New
PDF
API Testing following the Test Pyramid
PDF
Automated Testing in Angular Slides
PPTX
Riga Dev Day - Automated Android Continuous Integration
PDF
Monitoring Akka with Kamon 1.0
PDF
Testing with JUnit 5 and Spring
PPTX
Testing with laravel
Test Dependencies and the Future of Build Acceleration
September 2010 - Arquillian
Testing Spring Boot Applications
Testing with Spring: An Introduction
Integration testing - A&BP CC
Create an architecture for web test automation
Prod-Like Integration Testing for Distributed Containerized Applications
Unit testing - A&BP CC
Testing Web Apps with Spring Framework
How To Use Selenium Successfully (Java Edition)
JavaLand - Integration Testing How-to
Testing Java Web Apps With Selenium
Hadoop Summit 2013 : Continuous Integration on top of hadoop
Spring Framework 3.2 - What's New
API Testing following the Test Pyramid
Automated Testing in Angular Slides
Riga Dev Day - Automated Android Continuous Integration
Monitoring Akka with Kamon 1.0
Testing with JUnit 5 and Spring
Testing with laravel
Ad

Viewers also liked (9)

PDF
Understanding QA Kampala
PDF
Future of Testing, Test Automation and The Quality Analyst
PDF
What is WAAT?
PPTX
Java EE Arquillian Testing with Docker & The Cloud
PDF
Say NO To (More) Selenium Tests
PDF
Testes de Software & Ferramentas de Testes
PDF
vodQA Pune - Innovations in Testing - Agenda
PDF
Tests d'intégration avec Arquillian
PDF
Agile QA Process
Understanding QA Kampala
Future of Testing, Test Automation and The Quality Analyst
What is WAAT?
Java EE Arquillian Testing with Docker & The Cloud
Say NO To (More) Selenium Tests
Testes de Software & Ferramentas de Testes
vodQA Pune - Innovations in Testing - Agenda
Tests d'intégration avec Arquillian
Agile QA Process
Ad

Similar to Real Java EE Testing with Arquillian and ShrinkWrap (20)

PDF
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
PPTX
Jakarta EE Test Strategies (2022)
PDF
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
PDF
Arquillian 소개
PDF
테스트 어디까지 해봤니? Arquillian을 이용한 Real Object 테스트
PDF
Java Course 6: Introduction to Agile
PPTX
Unit testing hippo
PPTX
1 Module 1 Introduction.pptx
PPTX
Js tacktalk team dev js testing performance
PPTX
Kubernetes your tests! automation with docker on google cloud platform
PDF
Agile Java Testing With Open Source Frameworks
PDF
"Java memory model for practitioners" at JavaLand 2017 by Vadym Kazulkin/Rodi...
PPTX
Building with Gradle
PDF
Better code, littler classes
PPTX
Extending Arquillian graphene
PDF
Building Concurrent WebObjects applications with Scala
PDF
Moving to Java EE 6 and CDI and away from the clutter
PDF
Highlights from Java 10, 11 and 12 and Future of Java at Javaland 2019 By Vad...
PPTX
GeeCON 2012 hurdle run through ejb testing
PPTX
Building with Gradle
Throwing complexity over the wall: Rapid development for enterprise Java (Jav...
Jakarta EE Test Strategies (2022)
Devoxx UK 2013 Test-Driven Development with JavaEE 7, Arquillian and Embedded...
Arquillian 소개
테스트 어디까지 해봤니? Arquillian을 이용한 Real Object 테스트
Java Course 6: Introduction to Agile
Unit testing hippo
1 Module 1 Introduction.pptx
Js tacktalk team dev js testing performance
Kubernetes your tests! automation with docker on google cloud platform
Agile Java Testing With Open Source Frameworks
"Java memory model for practitioners" at JavaLand 2017 by Vadym Kazulkin/Rodi...
Building with Gradle
Better code, littler classes
Extending Arquillian graphene
Building Concurrent WebObjects applications with Scala
Moving to Java EE 6 and CDI and away from the clutter
Highlights from Java 10, 11 and 12 and Future of Java at Javaland 2019 By Vad...
GeeCON 2012 hurdle run through ejb testing
Building with Gradle

Recently uploaded (20)

PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
sap open course for s4hana steps from ECC to s4
PDF
KodekX | Application Modernization Development
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Approach and Philosophy of On baking technology
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Cloud computing and distributed systems.
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Big Data Technologies - Introduction.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
sap open course for s4hana steps from ECC to s4
KodekX | Application Modernization Development
Diabetes mellitus diagnosis method based random forest with bat algorithm
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
“AI and Expert System Decision Support & Business Intelligence Systems”
Approach and Philosophy of On baking technology
Empathic Computing: Creating Shared Understanding
Digital-Transformation-Roadmap-for-Companies.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Cloud computing and distributed systems.
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Unlocking AI with Model Context Protocol (MCP)
Machine learning based COVID-19 study performance prediction
Understanding_Digital_Forensics_Presentation.pptx
MIND Revenue Release Quarter 2 2025 Press Release
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Big Data Technologies - Introduction.pptx
Advanced methodologies resolving dimensionality complications for autism neur...

Real Java EE Testing with Arquillian and ShrinkWrap

  • 1. Real Java EE Testing with Arquillian and ShrinkWrap Don't fake it! Dan Allen Senior Software Engineer JBoss, by Red Hat
  • 2. Who am I? ● Author of Seam in Action, Manning 2008 ● Seam Community Liaison ● Weld, Seam & Arquillian project member ● JSR-314 (JSF 2) EG representative ● Open Source advocate mojavelinux 2 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 3. Agenda #testrevolution ● Testing, what's the problem? ● Integration testing challenges ● A component model for tests ● ShrinkWrap ● Arquillian ● Case study 3 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 4. Why don't we test? 4 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 5. 5 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 6. Common integration testing challenges ● Active mocks to stand in for collaborators ● Configure application to use test data source(s) ● Deal with (lack of) classpath isolation ● Run a build to create/deploy application archive 6 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 7. Skip the Build! Test in-container! 7 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 8. container n. manages a runtime environment and provides resources, a component model and a set of services 8 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 9. A component model for tests 9 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 10. Unit tests vs integration tests Unit Integration ● Fine-grained ● Coarse-grained ● Simple ● Complex ● Test single API call ● Test intricate web of calls ● Fast, fast, fast ● Sloooooooow ● Easily run in an IDE ● Run in an IDE? How? 10 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 11. Testing bandgap and compounding effort Functional complexity Thought and effort Unit Tests Integration Tests Functional Tests 11 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 12. Testing continuum with Arquillian Functional complexity Thought and effort Unit Tests Integration Tests Functional Tests 12 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 13. In-container approach to integration testing ● Separate container process ● Test deployed as archive ● Test runs in-container ● Results collected remotely 13 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 14. Weighing in-container testing Pros Cons ● Rely on shared memory ● Lack of isolation ● Pass-by-reference ● Environment not “true” ● Don't need remote views ● Managed concurrency 14 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 15. Don't tie your tests to a build! ● Extra, external setup ● Adds time to tests ● Coarse-grained packaging 15 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 16. n. a simple, Apache-licensed Java API for assembling archives like JARs, WARs, EARs; developed by the JBoss Community 16 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 17. Benefits of ShrinkWrap ● IDE incremental compilation ● Save and re-run ● Skip the build! ● Simple API ● Tooling views ● Export and debugging ● Micro-deployments 17 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 18. Fluent archive creation final JavaArchive archive = ShrinkWrap.create("slsb.jar", JavaArchive.class) .addClasses(Greeter.class, GreeterBean.class); System.out.println(archive.toString(true)); Yields output: slsb.jar: /com/ /com/acme/ /com/acme/app/ /com/acme/app/ejb3/ /com/acme/app/ejb3/Greeter.class /com/acme/app/ejb3/GreeterBean.class 18 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 19. Architecture overview 19 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 20. n. a simple, Apache-licensed test harness that abstracts away container lifecycle and deployment from test logic so developers can easily develop a broad range of integration tests for their enterprise Java applications; developed by the JBoss Community 20 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 21. The mission of the Arquillian project is to... Make integration testing a breeze! 21 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 22. Prove it! @RunWith(Arquillian.class) public class GreeterTestCase { @Deployment public static JavaArchive createTestArchive() { return ShrinkWrap.create("test.jar", JavaArchive.class) .addClasses(Greeter.class, GreeterBean.class); } @EJB private Greeter greeter; @Test public void shouldBeAbleToInjectEJB() throws Exception { assertEquals("Hello, Earthlings", greeter.greet("Earthlings")); } } 22 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 23. Arquillian guts the plumbing ● Manages lifecycle of container ● start/stop ● bind/unbind ● Enriches test class (e.g, @Inject, @EJB, @Resource) ● Bundles test archive ● code under test ● libraries ● test class and invoker (in-container run mode only) ● Negotiates deployment of test archive ● Captures test results and failures 23 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 24. Benefits of Arquillian ● Write less (test) code ● As much or as little “integration” as you need ● Looks like a unit test, get fully functioning components ● Simple way to get an instance of component under test ● You don't hesitate when you need a resource ● Same test, multiple containers ● It's the real deal! 24 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 25. Test frameworks JUnit TestNG >= 4.6 >= 5.10 25 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 26. Test archives ● Built using ShrinkWrap API ● Bundle: ● code under test ● dependent Libraries ● test class and invoker (in-container run mode only) ● Deployed to container before test is executed ● Undeployed after test is executed 26 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 27. Build, what build? @Deployment public static JavaArchive createTestArchive() { return ShrinkWrap.create("test.jar", JavaArchive.class) .addClasses(Greeter.class, GreeterBean.class); } 27 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 28. Skip the build! @Deployment public static JavaArchive createTestArchive() { return ShrinkWrap.create("test.jar", JavaArchive.class) .addPackage(TranslateController.class.getPackage()) .addManifestResource( new ByteArrayAsset("<beans/>".getBytes()), ArchivePaths.create("beans.xml")); } 28 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 29. Micro deployments ● Deploy components in isolation ● Test one slice at a time ● Don't need to wait for full application build/startup ● Tune size of integration ● Layers by inclusion ● No “big bang” 29 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 30. Containers ● Mode ● Capability 30 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 31. Container modes ● Embedded ● Same JVM as test runner ● Tests executed by native test runner ● Lifecycle controlled by Arquillian ● Remote ● Separate JVM from test runner ● Tests executed over remote protocol ● Arquillian likely binds to ports 31 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 32. Container capabilities ● Java EE application server (JBoss AS, GlassFish, etc) ● Servlet container (Tomcat, Jetty) ● Managed bean container (Weld SE, Spring) ● OSGi ● SPI allows you to introduce any other container 32 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 33. Not just for Java EE public interface DeployableContainer { void setup(Context context, Configuration configuration); void start(Context context) throws LifecycleException; ContainerMethodExecutor deploy(Context context, Archive<?> archive) throws DeploymentException; void undeploy(Context context, Archive<?> archive) throws DeploymentException; void stop(Context context) throws LifecycleException; } 33 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 34. Test enrichment ● Injection ● Fields & method arguments ● @Inject, @Resource, @EJB, etc. ● Contexts ● Request & Conversation  Test method ● Session  Test class ● Application  Test class ● Interceptors & decorators 34 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 35. Test run modes ● In-container ● Test bundled in @Deployment archive ● Archive deployed to container ● Test runs inside container with code under test ● Test invokes code under test directly (same JVM) ● Local ● @Deployment archive unmodified ● Archive deployed to the container ● Test runs in original test runner ● Test interacts as a remote client (e.g., HTTP client) 35 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 36. In-container testing MDBs: A case study ● Asynchronous ● How will client know server is done processing? ● Thread.sleep() is prone to transient failures ● No return value ● How do we check post-conditions? ● In-container == same JVM ● Gives test control ● Allows test to inspect contexts 36 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 37. Arquillian is... ● an innovative approach to testing ● a component model for tests ● test infrastructure & plumbing ● a set of container implementations ● a little bit of magic ;) 37 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 38. JBoss Testing Initiative ● Comprehensive testing tool “stack” ● Establish a testing culture in Java EE ● #jbosstesting on irc.freenode.net ● Filling voids ● ShrinkWrap – Programmatic archive creation ● Arquillian – Managed integration testing ● Placeebo – Mock Java EE API implementations ● JSFUnit – Gray-box JSF testing ● Contribute to the unit testing frameworks? 38 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 39. Get Involved! ● Active and open community ● How to contribute: ● Ideas on forums or IRC ● Feedback on releases – still in alpha! ● Enhancements and bug fixes – we love patches! ● Documentation ● Blogs – share your stories! ● Come meet us: ● http://jboss.org/arquillian ● #jbosstesting on irc.freenode.net 39 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 40. http://jboss.org/arquillian 40 Real Java EE Testing: Arquillian and ShrinkWrap | Dan Allen
  • 41. Q&A http://jboss.org/arquillian http://jboss.org/shrinkwrap Dan Allen Senior Software Engineer JBoss, by Red Hat