我使用restAssured在我们的应用程序中测试休息服务。应用程序接收Json格式。在调用rest服务之前,RestAssured必须使用toString方法反序列化bean类的字段(ENUM)以实现响应。 请遵循以下代码:
public enum Condition {
SUCCESS("success"),
FAILURE("failure");
private String condition;
private Condition(String condition) {
this.condition = condition;
}
@Override
public String toString() {
return this.condition;
}
}
public class Order {
private String order_id;
private Condition status;
//Getters and Setters
}
import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.RestAssured.preemptive;
import static org.assertj.core.api.Assertions.assertThat;
import static com.jayway.restassured.config.RestAssuredConfig.config;
import static com.jayway.restassured.config.ObjectMapperConfig.objectMapperConfig;
public class RestTests {
//.....//
private static RequestSpecification spec;
public static final Order inputOrderInvalid =
new Order.Builder()
.setOrderId("213424")
.setCondition(Condition.SUCCESS)
.build();
@BeforeClass
public static void initSpec(){
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
objectMapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS, false);
RestAssuredConfig config = config().objectMapperConfig(objectMapperConfig().jackson2ObjectMapperFactory((cls, charset) -> objectMapper));
spec = new RequestSpecBuilder()
.setConfig(config)
.setContentType(ContentType.JSON)
.setBaseUri(ENDPOINT_URI)
.addFilter(new ResponseLoggingFilter())//log request and response for better debugging. You can also only log if a requests fails.
.addFilter(new RequestLoggingFilter())
.build();
}
@Test
public void orderInvalid(){
JsonPath error = given()
.spec(spec)
.body(inputOrderInvalid)
.when()
.post(SERVICE)
.then()
.statusCode(HttpStatus.SC_BAD_REQUEST)
.extract()
.jsonPath();
assertThat(error.getString("code")).isEqualTo("INCORRECT_VALUE");
}
//.....//
}
restAssured只发送requestBody:
{
"order_id" : "12312546",
"condition" : "SUCCESS"
}
似乎忽略了在ObjectMapper中设置的配置。 (DeserializationFeature.READ_ENUMS_USING_TO_STRING)。
有人可以帮助我吗?
答案 0 :(得分:1)
我的目标是使用toString进行Serialize,我必须更改序列化功能:
objectMapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
为:
objectMapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, true);
它解决了这个问题。