Как я могу использовать RestTemplate для проверки неисправности Wiremock в интеграционном тесте? - PullRequest
1 голос
/ 09 марта 2020

Я написал несколько успешных тестов, чтобы доказать, что код HttpStatus возвращается правильно, однако сейчас я пытаюсь проверить возвращенный код ошибки, как показано ниже. Обычно я бы сказал

 assertThat(actualResponse.getStatusCode(), is(status));

, чтобы получить код статуса Http. Как я могу проверить код неисправности? В настоящее время у меня есть ниже, но я не уверен, как вернуть код ошибки из тела actualResponse.

public void shouldReturnSuitableStatusCodeForScenario(String requestFileName,Fault fault, String actualResponseFileName) throws JSONException {
    //Given
    String createRequest = readJsonFromFile(DIRECTORY, requestFileName);

    //When
    ResponseEntity<String> actualResponse = stub.postForEntity(HTTP_LOCALHOST_8081 + "/v1/transaction/", createRequest, String.class);

    //Then
    assertThat(actualResponse, is(fault));
    JSONAssert.assertEquals(readJsonFromFile(DIRECTORY, actualResponseFileName), actualResponse.getBody(), true);
}

Текущая заглушка, пропущен код для краткости:

.willReturn(aResponse() .withHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE) .withFault(Fault.MALFORMED_RESPONSE_CHUNK) .withBodyFile("/malformed_chunk_response.json")));

1 Ответ

1 голос
/ 09 марта 2020

В случае, если вы ожидаете ошибку (я предполагаю, что stub является RestTemplate), один из способов извлечь как код состояния, так и тело ошибки, выглядит следующим образом:

String statusText;
int statusCode;

stub.setErrorHandler(new ResponseErrorHandler() {
    @Override
    boolean hasError(ClientHttpResponse response) throws IOException {
        return response.statusCode.isError()
    }

    @Override
    void handleError(ClientHttpResponse response) throws IOException {
        statusText = response.getStatusText();
        statusCode = response.rawStatusCode;
    }
});

stub.postForEntity(HTTP_LOCALHOST_8081 + "/v1/transaction/", createRequest, String.class);
...