Test in-container!


Arquillian provides a easy mechanism to test your application code inside a remote or embedded container or by interacting as a client of the container.


Mission Statement


The mission of the Arquillian project is to provide a simple test harness that developers can use to produce a broad range of integration tests for their Java applications (most likely enterprise applications). A test case may be executed within the container, deployed alongside the code under test, or by coordinating with the container, acting as a client to the deployed code.


Arquillian defines two styles of container, remote and embedded. A remote container resides in a separate JVM from the test runner. Its lifecycle may be managed by Arquillian, or Arquillian may bind to a container that is already started. An embedded container resides in the same JVM and is mostly likely managed by Arquillian. Containers can be further classified by their capabilities. Examples include a fully compliant Java EE application server (e.g., GlassFish, JBoss AS, Embedded GlassFish), a Servlet container (e.g., Tomcat, Jetty) and a bean container (e.g., Weld SE). Arquillian ensures that the container used for testing is pluggable, so the developer is not locked into a proprietary testing environment.


Arquillian seeks to minimize the burden on the developer to carry out integration testing by handling all aspects of test execution, including:


  • managing the lifecycle of the container (start/stop),
  • bundling the test class with dependent classes and resources into a deployable archive,
  • enhancing the test class (e.g., resolving @Inject, @EJB and @Resource injections),
  • deploying the archive to test (deploy/undeploy) and
  • capturing results and failures.


To avoid introducing unnecessary complexity into the developer's build environment, Arquillian integrates transparently with familiar testing frameworks (e.g., JUnit 4, TestNG 5), allowing tests to be launched using existing IDE, Ant and Maven test plugins without any add-ons.


Arquillian makes integration testing a breeze.

Project Information
Anonymous SCM
Committer SCM
Issue Tracking
Reference Guide
Demo documentation

Arquillian - Demo

User ForumsArquillian Space
Development ForumsArquillian Development Space

Arquillian - FAQ

External Articles
Project LeadAslak Knutsen

Pete Muir, Dan Allen, Steven Boscarine, Andrew Rubinger

IRC#jbosstesting on

Module Name
Maven2 ID
apiorg.jboss.arquillian:arquillian-apiDevelopment In Use
buildorg.jboss.arquillian:arquillian-buildDevelopment In Use
impl-baseorg.jboss.arquillian:arquillian-impl-baseDevelopment In Use
spiorg.jboss.arquillian:arquillian-spiDevelopment In Use
packager-javaeeorg.jboss.arquillian.packager:arquillian-packager-javaeeDevelopment In Use
packager-applicationarchiveorg.jboss.arquillian.packager:arquillian-packager-applicationarchiveDevelopment In Use
testenricher-ejborg.jboss.arquillian.testenricher:arquillian-testenricher-ejbDevelopment In Use
testenricher-resourceorg.jboss.arquillian.testenricher:arquillian-testenricher-resourceDevelopment In Use
testenricher-cdiorg.jboss.arquillian.testenricher:arquillian-testenricher-cdiDevelopment In Use
protocol-servletorg.jboss.arquillian.protocol:arquillian-protocol-servletDevelopment In Use
protocol-localorg.jboss.arquillian.protocol:arquillian-protocol-localDevelopment In Use

Development In Use


Development In Use


Development In Use

weld-embeddedorg.jboss.arquillian.container:arquillian-weld-embeddedDevelopment In Use
glassfish-embedded-30org.jboss.arquillian.container:arquillian-glassfish-embedded-30Development In Use
openejborg.jboss.arquillian.container:arquillian-openejbDevelopment In Use
junitorg.jboss.arquillian:arquillian-junitDevelopment In Use

Development In Use

example-junitorg.jboss.arquillian.example:arquillian-example-junitDevelopment In Use
example-testngorg.jboss.arquillian.example:arquillian-example-testngDevelopment In Use
example-domainorg.jboss.arquillian.example:arquillian-example-domainDevelopment In Use


Release Plan
0.1.xRetiredPrototyping and Development Series
1.0.0.AlphaXIn ProcessEarly-access Release Series used primarily for testing integration and gathering community input
1.0.0.BetaXShort-termCandidate for Frozen APIs, major features are complete
1.0.0.CRXShort-termRelease Candidates; APIs stable except for bug fixes
1.0.0.FinalFuturePromoted from re-tag of a release candidate; Stable
1.0.x.FinalFutureIncremental Patch Releases; no API changes, backwards-compatible
1.x.y.FinalUnscheduledNew feature; backwards-compatibility preserved
2.0.0.AlphaXUnscheduledOverhaul, refactoring.  Features may be added/dropped, API contract disappears



Sample Code

Test a EJB in container using JUnit

package com.acme.ejb;

import javax.ejb.EJB;

import junit.framework.Assert;

import org.jboss.arquillian.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archives;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;

public class GreetingManagerTest
   public static JavaArchive createDeployment() {
      return Archives.create("test.jar", JavaArchive.class)
   private GreetingManager greetingManager;
   public void shouldGreetUser() throws Exception {
      String userName = "Devoxx";
            "Hello " + userName,


Maven Dependencies





Further reading