No se puede simular el objeto de respuesta del cliente de Glassfish Jersey

Estoy teniendo problemas con la creación de un objeto de Respuesta simulada para usar con mis pruebas de unidad. estoy usandoorg.glassfish.jersey.core.jersey-client versión 2.3.1 para implementar mi cliente RESTful ymockito Versión 1.9.5 para ayudarme con objetos simulados. Aquí está el código de mi prueba:

@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);
}

El problema se produce cuandothis.client.getAll(); es ejecutado. Aquí está el código de ese método:

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;
}

Tenga en cuenta que me estoy burlando del método this.simpleClient.getAllWithResponse () con la Respuesta creada manualmente. Cuando llega alresponse.readEntity(resourceListType); Instrucción, Jersey lanza la siguiente excepción:java.lang.IllegalStateException - Method not supported on an outbound message.. Después de mucha investigación y depuración, resulta que, por alguna razón, cuando creo una Respuesta usando el generador de respuestas comoResponse.ok(expectedResource, MediaType.APPLICATION_JSON).build(); lo crea como un OutboundResponse en lugar de como unInboundResponse. Estos últimos son los únicos autorizados a utilizar elResponse.readEntity() método. Si es unRespuesta saliente, se lanza la excepción.

Sin embargo, no pude encontrar ninguna forma de convertir la respuesta creada manualmente a un InboundResponse. Así que mis pruebas están condenadas :(. ¿Tienen alguna idea de lo que puedo hacer aquí? No quiero burlarme del objeto Respuesta con Mockito porque creo que podría ser un olor de código ya que viola la Ley de Demeter. Sinceramente, me he quedado sin ideas. Cosas como esta deberían ser simples y directas.

Respuestas a la pregunta(7)

Su respuesta a la pregunta