我编写了许多成功的测试来证明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")));
在您预期有错误的情况下(我假设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);