Невозможно создать объект ответа клиента 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, потому что я думаю, что это может быть запах кода, поскольку он нарушает закон Деметры. С уважением, у меня нет идей здесь. Такие вещи должны быть простыми и понятными.

Ответы на вопрос(7)

Ваш ответ на вопрос