这是我对GET端点的restAssure调用:
public static Response getCall(int expectedStatusCode){
return given()
.port(PORT)
.contentType(ContentType.JSON)
.when()
.log().all()
.get(getEndpoint)
.then()
.log().all()
.assertThat()
.statusCode(expectedStatusCode).extract().response();
}
以下是对POST端点的调用:
public static Response postEndpoint(Request request, int expectedStatusCode) {
return given()
.port(PORT)
.contentType(ContentType.JSON)
.body(request)
.when()
.log().all()
.post(postEndpointURI)
.then()
.log().all()
.assertThat()
.statusCode(expectedStatusCode).extract().response();
}
如果可见,代码是冗余的,唯一的区别是调用类型,POST和GET。
如何使代码抽象化并使调用不同?
答案 0 :(得分:1)
希望它对您的冗余问题有所帮助。您可能会从这里获得更多想法以改进重构。
private static final int PORT = 1922;
private static String getEndpoint;
private static String postEndpointURI;
/**
* First part of the building up the request
*/
private static RequestSpecification buildRequest() {
return given()
.port(PORT)
.contentType(ContentType.JSON)
.when()
.log().all();
}
/**
* Relevant part of the GET request
*/
private static Response buildGetRequest() {
return buildRequest().get(getEndpoint);
}
/**
* Relevant part of the POST request
*/
private static Response buildPostRequest(Request request) {
return buildRequest().body(request).post(postEndpointURI);
}
/**
* Last bit redundant that was called by both calls
*/
private static Response extractResponse(Response response, int expectedStatusCode) {
return response.then()
.log().all()
.assertThat()
.statusCode(expectedStatusCode).extract().response();
}
/**
* Your main GET method
*/
public static Response assertThatGetResponseStatusIs(int expectedStatusCode) {
return extractResponse(buildGetRequest(), expectedStatusCode);
}
/**
* Your main POST method
*/
public static Response assertThatPostResponseStatusIs(Request request, int expectedStatusCode) {
return extractResponse(buildPostRequest(request), expectedStatusCode);
}
public static void main(String[] args) {
System.out.println(assertThatGetResponseStatusIs(500));
System.out.println(assertThatPostResponseStatusIs(request, 400));
}