我如何使用RestTemplate在集成测试中验证Wiremock故障?

问题描述 投票:1回答:1

我编写了许多成功的测试来证明HttpStatus代码已正确返回,但是我现在正在寻找验证返回的Fault代码如下。通常我会说

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

当前存根,省略了一些brevit代码:

.willReturn(aResponse() .withHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE) .withFault(Fault.MALFORMED_RESPONSE_CHUNK) .withBodyFile("/malformed_chunk_response.json")));
spring integration-testing wiremock
1个回答
1
投票

在您预期有错误的情况下(我假设stubRestTemplate),可以同时提取状态代码和错误正文的一种方法是这样的:

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);
© www.soinside.com 2019 - 2024. All rights reserved.