Ich bin derzeit ratlos mit Unit-Test eine Methode, die einen REST-Service innerhalb es für die Übermittlung eines Status an diesen Service ruft.Unit-Test für Rest Anruf
Ich habe eine Methode wie:
public void informService(String state, BusinessObject bus) {
Client client = null;
Response response = null;
try {
client = new ResteasyClientBuilder()
.establishConnectionTimeout(10L, TimeUnit.MINUTES)
.socketTimeout(10L, TimeUnit.MINUTES)
.build();
WebTarget target = client.target("my.url");
MyDTO dto = new MyDTO();
dto.state = state;
response = target.request("application/json").put(Entity.json(dto));
boolean ok = handleReturnCode(response.getStatus(), bus.getId());
if (!ok) {
throw new RuntimeException("Invalid status" + response.getStatus());
}
return ok;
} catch (Exception e) {
} finally {
try {
if (response != null) {
response.close();
}
if (client != null)
client.close();
} catch (Exception e) {
}
}
So in dem Verfahren ein Anruf an einen REST-Dienst ist, die innerhalb der Methode ausgewertet wird. Wie kann ich dieses Verhalten testen?
Das ist wirklich hässlich Code muss ich sagen. Um dies zu testen, können Sie sich PowerMock ansehen, es könnte Ihnen helfen –
Die Methode folgt nicht den SOLID-Prinzipien. Teilen Sie den Code in Responsabilities. Erstellen Sie den Client nicht in der Methode, empfangen Sie ihn nicht als Parameter oder verwenden Sie keine Factory. So können Sie sich über die Methode lustig machen und nur die interne Logik testen. Komponententests befassen sich mit der Testmethode/Klassenlogik, nicht mit anderen Klassen. –