Ich habe Probleme beim Erstellen eines Schein-Response-Objekts, das mit meinen Komponententests verwendet werden soll. Ich verwende org.glassfish.jersey.core.jersey-client
Version 2.3.1, um meinen RESTful-Client zu implementieren und mockito
Version 1.9.5, um mir mit Mock-Objekten zu helfen. Hier ist der Code mein-Test:Kann Glassfish Trikot nicht verwerfen Clientantwortobjekt
@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);
}
Das Problem tritt auf, wenn this.client.getAll();
ausgeführt wird. Hier ist die Methode Code:
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;
}
Bitte beachte, dass ich spöttisch bin die this.simpleClient.getAllWithResponse() -Methode mit der manuell erstellten Antwort. Wenn es die response.readEntity(resourceListType);
Anweisung erreicht, löst Jersey die folgende Ausnahme aus: java.lang.IllegalStateException - Method not supported on an outbound message.
. Nach viel Forschung und Debugging, stellt sich, dass aus irgendeinem Grund, wenn ich eine Antwort mit der Antwort Builder erstellen wie Response.ok(expectedResource, MediaType.APPLICATION_JSON).build();
sie es als OutboundResponse statt als InboundResponse schafft. Letztere sind die einzigen, die die Methode Response.readEntity()
verwenden dürfen. Wenn es sich um eine OutboundResponse handelt, wird die Ausnahme ausgelöst.
Ich konnte jedoch keine Möglichkeit finden, die manuell erstellte Antwort auf eine InboundResponse zu konvertieren. Also meine Tests sind zum Scheitern verurteilt :(. Weißt du Jungs/Mädels, was ich hier machen kann? Ich möchte das Response - Objekt nicht mit Mockito verspotten, weil ich denke, dass es ein Code - Geruch sein könnte, da es gegen das Gesetz verstößt Demeter. mit freundlichen Grüßen ich aus Ideen bin hier. Dinge wie diese sollte einfach und unkompliziert sein.
Thomas, danke für den Eingang !! Nur eine Frage ... wenn du es wärst ... würdest du die readEntity() -Methode verspotten? –
Es hängt davon ab, was Sie testen möchten? – Thomas
Die getAll-Methode macht das, was sie tun soll, und gibt zurück, was sie zurückgeben soll, je nachdem, was sie empfängt. –