hi jc,

no - that wasn't the point.

#1 CdiTestRunner does the injection, scope-handling,... in the test and
therefore in the test-thread -> you can't remove it
#2 CdiTestRunner can't start scopes in any >other thread< (in your case
jetty has to trigger weld to do it)
#3 SimpleMockManager needs to be @RequestScoped, but jetty/weld needs to do
the scope-handling for the 2nd thread (like in a normal app)

if you change e.g. PingResource to @RequestScoped even
PingResourceSimpleTest fails for the same reason.

-> CdiTestRunner is fine, SimpleMockManager is fine and the call to #getMock
is fine as well.
however, in your setup jetty isn't integrated properly (with weld).
see any setup of jetty and weld or a manual integration (e.g. used at [1]).

regards,
gerhard

[1] http://s.apache.org/Qja

http://www.irian.at

Your JavaEE powerhouse -
JavaEE Consulting, Development and
Courses in English and German

Professional Support for Apache
MyFaces, DeltaSpike and OpenWebBeans



2015-02-04 4:13 GMT+01:00 Jean-Christophe Counio <
[email protected]>:

>
> So after further testing, it looks like the issue is the SimpleMockManager
> is @RequestScoped. The instance is shared properly by the container between
> the test and jersey but the call to getMock is proxied and fails since the
> context isn’t active. Would it fix the problem if the MockManager scope was
> Application in this case ?
>
> JC
>
> On Feb 3, 2015, at 4:00 PM, Jean-Christophe Counio <
> [email protected]> wrote:
>
> > Thanks, yes that makes sense. If I comment the @RunWith (going to pure
> JerseyTest), the dependency injection doesn’t happen at all, so I was
> thinking Jersey recognize the test container in some way, but I can see now
> there are 2 different BeanManangers in application and tests.
> > Any idea how to solve that issue ? Doing the same thing in Spring is 2
> lines of code so I hope there’s way to do the same with CDI.
> >
> > JC
> >
> >
> > On Feb 3, 2015, at 3:13 PM, Gerhard Petracek <[email protected]>
> wrote:
> >
> >> hi jc,
> >>
> >> it doesn't work because jetty uses an own thread to answer the request
> and
> >> therefore the cdi-container needs to be integrated properly
> >> (the request-context needs to be active for every request answered by
> >> jetty).
> >>
> >> just fyi:
> >> CdiTestRunner just manages the current (test-)thread.
> >>
> >> regards,
> >> gerhard
> >>
> >> http://www.irian.at
> >>
> >> Your JavaEE powerhouse -
> >> JavaEE Consulting, Development and
> >> Courses in English and German
> >>
> >> Professional Support for Apache
> >> MyFaces, DeltaSpike and OpenWebBeans
> >>
> >>
> >>
> >> 2015-02-03 19:54 GMT+01:00 Gerhard Petracek <[email protected]
> >:
> >>
> >>> hi jc,
> >>>
> >>> ok - i'll have a look at it soon.
> >>>
> >>> regards,
> >>> gerhard
> >>>
> >>> http://www.irian.at
> >>>
> >>> Your JavaEE powerhouse -
> >>> JavaEE Consulting, Development and
> >>> Courses in English and German
> >>>
> >>> Professional Support for Apache
> >>> MyFaces, DeltaSpike and OpenWebBeans
> >>>
> >>>
> >>>
> >>> 2015-02-03 19:27 GMT+01:00 Jean-Christophe Counio <
> >>> [email protected]>:
> >>>
> >>>> Hi,
> >>>>
> >>>> Here’s the link :
> >>>> https://github.com/couniojc/jerseytest-cdi
> >>>>
> >>>> If you set
> >>>> "deltaspike.testcontrol.mock-support.allow_mocked_beans=false”, you
> can run
> >>>> PingResourceSimpleTest (no mocks in this one)
> >>>> As soon as you set it to true, it throws the exception.
> >>>>
> >>>> Thanks
> >>>>
> >>>> JC
> >>>>
> >>>>
> >>>> On Feb 3, 2015, at 12:29 AM, Gerhard Petracek <
> [email protected]>
> >>>> wrote:
> >>>>
> >>>>> hi jc,
> >>>>>
> >>>>> please provide a link to a demo which illustrates the issue.
> >>>>>
> >>>>> regards,
> >>>>> gerhard
> >>>>>
> >>>>> http://www.irian.at
> >>>>>
> >>>>> Your JavaEE powerhouse -
> >>>>> JavaEE Consulting, Development and
> >>>>> Courses in English and German
> >>>>>
> >>>>> Professional Support for Apache
> >>>>> MyFaces, DeltaSpike and OpenWebBeans
> >>>>>
> >>>>>
> >>>>>
> >>>>> 2015-02-03 2:18 GMT+01:00 Jean-Christophe Counio <
> >>>>> [email protected]>:
> >>>>>
> >>>>>> Hi,
> >>>>>>
> >>>>>> Anyone successfully integrated JerseyTest with mocks using
> deltaspike ?
> >>>>>> When I activate
> >>>>>> deltaspike.testcontrol.mock-support.allow_mocked_beans=true, I have
> the
> >>>>>> following error :
> >>>>>>
> >>>>>> org.jboss.weld.context.ContextNotActiveException: WELD-001303: No
> >>>> active
> >>>>>> contexts for scope type javax.enterprise.context.RequestScoped
> >>>>>>      at
> >>>>>>
> >>>>
> org.jboss.weld.manager.BeanManagerImpl.getContext(BeanManagerImpl.java:687)
> >>>>>>      at
> >>>>>>
> >>>>
> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:79)
> >>>>>>      at
> >>>>>>
> >>>>
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:99)
> >>>>>>      at
> >>>>>>
> >>>>
> org.jboss.weld.proxies.DynamicMockManager$1777947725$Proxy$_$$_WeldClientProxy.getMock(Unknown
> >>>>>> Source)
> >>>>>>      at
> >>>>>>
> >>>>
> org.apache.deltaspike.testcontrol.impl.mock.MockAwareInjectionTargetWrapper.produce(MockAwareInjectionTargetWrapper.java:59)
> >>>>>>      at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:149)
> >>>>>>      at
> >>>>>> org.jboss.weld.context.AbstractContext.get(AbstractContext.java:96)
> >>>>>>      at
> >>>>>>
> >>>>
> org.jboss.weld.bean.proxy.ContextBeanInstance.getInstance(ContextBeanInstance.java:98)
> >>>>>>      at
> >>>>>>
> >>>>
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:78)
> >>>>>>      at
> >>>>>>
> com.test.simplerest.PingResource$Proxy$_$$_WeldClientProxy.ping(Unknown
> >>>>>> Source)
> >>>>>>
> >>>>>> The test is like this :
> >>>>>> @RunWith(CdiTestRunner.class)
> >>>>>> public class PingResourceTest extends JerseyTest {
> >>>>>>
> >>>>>>  @Inject
> >>>>>>  ApplicationMockManager applicationMockManager;
> >>>>>>
> >>>>>>  MyInj injMock = EasyMock.createMock(MockType.NICE, MyInj.class);
> >>>>>>
> >>>>>>  @Override
> >>>>>>  protected Application configure() {
> >>>>>>      return new MyApp();
> >>>>>>  }
> >>>>>>
> >>>>>>  @Test
> >>>>>>  public void testPing() {
> >>>>>>      applicationMockManager.addMock(injMock); //no behavior set so
> it
> >>>>>> should return null
> >>>>>>      String resp = target("/ping").request().get(String.class);
> >>>>>>      Assert.assertEquals("Ping", “null", resp);
> >>>>>>  }
> >>>>>> }
> >>>>>>
> >>>>>> I tried to play with @TestControl but there’s no changes.
> >>>>>>
> >>>>>> Thanks
> >>>>>>
> >>>>>> JC
> >>>>>>
> >>>>>>
> >>>>
> >>>>
> >>>
> >
>
>

Reply via email to