代码之家  ›  专栏  ›  技术社区  ›  Stefan S.

如何在阿奎尔语测验中模拟乌里信息

  •  0
  • Stefan S.  · 技术社区  · 6 年前

    我创建了一个使用 UriInfo :

    class Endpoint implements Resource {
    
        @Context
        private UriInfo uriInfo;
    
    
        @Override
        public Response doMagic() {
            // do magic
        }
    }
    

    部署到我的容器中,这很好地工作,但我也有一个arquillian测试:

    @Test
    public void test(@ArquillianResteasyResource Resource api) throws Exception {
        try (final Response response = api.doMagic()) {
            // test magic
        }
    }
    

    引发以下异常:

    javax.ejb.EJBException: org.jboss.resteasy.spi.LoggableFailure: RESTEASY003880: Unable to find contextual data of type: javax.ws.rs.core.UriInfo
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:186)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:330)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:238)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:422)
    at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:509)
    

    这个例外是有意义的,arquillian测试并不测试实际的RESTWebService,而是测试bean。因此,当然没有WebService上下文,其中包括 乌里文 .

    我想为了解决这个问题,我必须嘲笑 乌里文 不知何故。但是我不知道如何模仿注射了 @Context . 我该怎么做?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Stefan S.    6 年前

    所以这并不完全是嘲弄,但至少现在它起作用了。我将我的代码更改为:

    class Endpoint implements Resource {
    
        @Override
        public Response doMagic(@Context UriInfo uriInfo) {
            // do magic
        }
    }
    

    在我的测试用例中这样称呼它:

    @Test
    public void test(@ArquillianResteasyResource Resource api) throws Exception {
        try (final Response response = api.doMagic(new TestUriInfo())) {
            // test magic
        }
    }
    

    在哪里? TestUriInfo 返回我想要的值。