Hello,
I am using deltaspike 1.8.0 and owb version 1.6.3.
My test which has to be executed with CdiTestRunner, is starting a new
thread.
This thread retrieves an instance of MyBean from CDI and try to use it.
MyBean is @ApplicationScoped.
It works fine unless I add in apache-deltaspike.properties:
deltaspike.testcontrol.mock-support.allow_mocked_beans=true
(It is necessary for some other tests. As well as stop_container=false is
also necessary).
With allow_mocked_beans=true I have following exception:
javax.enterprise.context.ContextNotActiveException: WebBeans context with
scope type annotation @RequestScoped does not exist within current thread
It appears that while searching for MyBean, it is searching for
SimpleMockManager bean.
SimpleMockManager is @RequestScoped, so deltaspike does not find it
(Logical, there is no request context as we are in a new thread).
A very ugly workaround is to use MyBean in MyTest: once it is created, it
become accessible in the other thread...
Is there a better solution?
A maven project corresponding to this available in github, please search
for rt15/cdi-test.
Otherwise here is the source code:
=======================================================
@RunWith(CdiTestRunner.class)
public class MyTest {
@Inject
private MyBean myBean;
@Test
public void test() throws Exception {
// Ugly workaround: uncomment next line.
// this.myBean.foo();
MyThread myThread = new MyThread();
myThread.start();
myThread.join();
if (myThread.exception != null) {
throw myThread.exception;
}
}
}
=======================================================
public class MyThread extends Thread {
public Exception exception;
@Override
public void run() {
try {
MyBean myBean = CDI.current().select(MyBean.class).get();
myBean.foo();
} catch (Exception e) {
this.exception = e;
}
}
}
=======================================================
@ApplicationScoped
public class MyBean {
public void foo() {
System.out.println("foo");
}
}
=======================================================
deltaspike.testcontrol.mock-support.allow_mocked_beans=true
=======================================================
Regards.