Hi,

Is it normal that all test methods from a test class running with 
EJBContainerRunner share one single request context?
If the request context is shared between methods, this can cause some unwanted 
dependency between them.

Example:

public @ApplicationScoped class ScopeService {  
    public void print(String message) { System.out.println(message); }
    public void onInitialized(@Observes @Initialized(RequestScoped.class) 
Object event) { System.out.println("initialized request context"); }
    public void onDestroyed(@Observes @Destroyed(RequestScoped.class) Object 
event) { System.out.println("destroyed request context"); }
}

public @RunWith(EJBContainerRunner.class) class ContainerScopeTest {
    public @Inject ScopeService service;
    public @Test void test1() { this.service.print("test1"); }
    public @Test void test2() { this.service.print("test2"); }
}

gives the following logs:

...
INFO - Deployed Application(path=D:\development\workspaces\sdpsp\arquillian)
initialized request context
test2
test1
INFO - Undeploying app: D:\development\workspaces\sdpsp\arquillian
destroyed request context
INFO - Destroying OpenEJB container

A test with arquillian like this one:

public @RunWith(Arquillian.class) class ArquillianScopeTest {
        public @Deployment static JavaArchive deploy() { return 
ShrinkWrap.create(JavaArchive.class).addClasses(ScopeService.class).addAsManifestResource(EmptyAsset.INSTANCE,
 "beans.xml"); }
        public @Inject ScopeService service;
        public @Test void test1() { this.service.print("test1"); }
        public @Test void test2() { this.service.print("test2");        }
}

gives the following logs:

...
INFO - Deployed 
Application(path=D:\development\workspaces\sdpsp\arquillian\9ee795c0-40e2-47b9-b384-c923f525aefd.jar)
initialized request context
test1
destroyed request context
initialized request context
destroyed request context
initialized request context
test2
destroyed request context
initialized request context
destroyed request context
INFO - Undeploying app: 
D:\development\workspaces\sdpsp\arquillian\9ee795c0-40e2-47b9-b384-c923f525aefd.jar
INFO - Destroying container system

There are too many request context initialized/destroyed with arquillian but at 
least each test gets its own context.

With ApplicationComposer, a new container is started/stopped for each each test 
so they each run with their own request context.

Xavier

Reply via email to