Как смоделировать UriInfo в тесте Arquillian - PullRequest
0 голосов
/ 20 сентября 2018

Я создал REST webservice, который использует 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 проверяют не реальный веб-сервис REST, а бины.Поэтому, конечно, нет контекста веб-сервиса, который включает в себя UriInfo.

Я думаю, чтобы решить это, я должен каким-то образом высмеивать UriInfo.И все же я не мог выяснить, как издеваться над бобами, которые вводятся с помощью @Context.Как мне это сделать?

1 Ответ

0 голосов
/ 21 сентября 2018

Так что это не совсем насмешливо, но, по крайней мере, теперь это работает.Я изменил свой код следующим образом:

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 возвращает значения, которые я хочу получить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...