Невозможно создать объект ответа клиента Glassfish Jersey Client
У меня проблемы с созданием фиктивного объекта Response для использования с моими модульными тестами. я используюorg.glassfish.jersey.core.jersey-client
версия 2.3.1 для реализации моего клиента RESTful иmockito
Версия 1.9.5, чтобы помочь мне с ложными объектами. Вот мой тесткод:
@Test
public void testGetAll() throws IOException {
// Given
String expectedResource = "expectedResource"
final Response expectedRes = Response.ok(expectedResource, MediaType.APPLICATION_JSON).build();
String receivedResource;
BDDMockito.given(this.client.getSimpleClient().getAllWithResponse()).willReturn(expectedRes);
// When
receivedResource = this.client.getAll();
// Then
Assert.assertNotNull("Request constructed correctly and response received.", receivedResource);
Assert.assertEquals("Resource is equal to expected.", expectedResource, receivedResource);
}
Проблема возникает, когдаthis.client.getAll();
выполнен. Вот этот методкод:
public String getAll() throws GenericAragornException, ProcessingException{
Response response = this.simpleClient.getAllWithResponse();
if (response.getStatus() != 200) {
processErrorResponse(response);
}
String entity = response.readEntity(String.class);
// No errors so return entity converted to resourceType.
return entity;
}
Обратите внимание, что я издеваюсь над методом this.simpleClient.getAllWithResponse () с помощью ответа, созданного вручную. Когда он достигаетresponse.readEntity(resourceListType);
По инструкции Джерси выдает следующее исключение:java.lang.IllegalStateException - Method not supported on an outbound message.
, После большого количества исследований и отладки, получается, что по какой-то причине я создаю Ответ, используя конструктор ответов, такой какResponse.ok(expectedResource, MediaType.APPLICATION_JSON).build();
он создает его как OutboundResponse, а не какInboundResponse, Последние являются единственными, которым разрешено использоватьResponse.readEntity()
метод. Если этоOutboundResponse, исключение брошено.
Однако я не смог найти какой-либо способ преобразования созданного вручную ответа в InboundResponse. Так что мои тесты обречены :(. Ребята, у вас есть идеи, что я могу здесь сделать?Я не хочу издеваться над объектом Response с помощью Mockito, потому что я думаю, что это может быть запах кода, поскольку он нарушает закон Деметры. С уважением, у меня нет идей здесь. Такие вещи должны быть простыми и понятными.