Тестовый асинхронный метод JAX-RS - PullRequest
0 голосов
/ 26 июня 2019

Рассмотрим асинхронный метод JAX-RS, являющийся частью OkResource:

@GET
@Path("/ok")
@ManagedAsync
public void getOk(@Suspended final AsyncResponse asyncResponse) {
    asyncResponse.resume("OK");
}

Dropwizard, основанный на Джерси, предоставляет полезную ResourceTestRule.Тестовый класс для вышеуказанного метода будет содержать экземпляр этого правила.

@ClassRule
public static ResourceTestRule RULE = ResourceTestRule.builder()
  .addResource(new OkResource())
  .build();

Тестовый метод для метода JAX-Rs будет выглядеть как

@Test
public void testGetOk()  {
    Response response = RULE.target("/ok).request().get();
    // assert ...
}

Для синхронный Методы JAX-RS это прекрасно работает.Но для асинхронного JAX-RS, как и выше, этот подход не работает:

WARN [2019-06-26 09: 15: 15,811] org.glassfish.jersey.test.inmemory.InMemoryConnector: Асинхронные вызовы на стороне сервера не поддерживаются InMemoryContainer.

Существует ли другой способ тестирования асинхронных методов JAX-RS без необходимости прямого вызова метода (getOk в данном случае) с высмеянным AsyncResponse?

1 Ответ

1 голос
/ 26 июня 2019

Документация Dropwizard говорит нам, что делать:

  • добавить зависимость Maven для TestContainerFactory
  • установите его при создании ResourceTestRule:
@ClassRule
public static ResourceTestRule RULE = ResourceTestRule.builder()
  .setTestContainerFactory(new GrizzlyWebTestContainerFactory())
  .addResource(new OkResource()).build();

Документация Джерси описывает больше SPI .

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