放心浮动负零
Rest Assured and float negatie zero
我想用 Rest Assured 测试我的休息服务,但是当服务 returns 负零值时我的测试失败了。
放心测试:
String methodName="multiply";
float[] operands = {1f,-2.5f,0};
float result = operands[0] * operands[1] * operands[2];
Response response = given().
pathParam("a",operands[0]).
pathParam("b",operands[1]).
pathParam("c",operands[2]).
contentType(JSON).
log().ifValidationFails().
when().
get("/"+methodName+"/{a}/{b}/{c}").
then().
assertThat().statusCode(200).
body("result",equalTo(result));
错误:
java.lang.AssertionError: JSON path result doesn't match.
Expected: <-0.0F>
Actual: 0.0
结果json:
{"result":-0.0}
为什么我的休息服务 returns 负零值时测试失败?
我发现最好将 REST Assured 配置为 return 所有 Json 数字作为 BigDecimal,然后使用 hamcrest closeTo 匹配器。
String methodName="multiply";
double[] operands = {1,-2.5,0};
double result = operands[0] * operands[1] * operands[2];
Response response = given().
config(RestAssured.config().jsonConfig(jsonConfig().numberReturnType(BIG_DECIMAL))).
pathParam("a",operands[0]).
pathParam("b",operands[1]).
pathParam("c",operands[2]).
contentType(JSON).
log().ifValidationFails().
when().
get("/"+methodName+"/{a}/{b}/{c}").
then().
assertThat().statusCode(200).
log().ifValidationFails().
body("result",closeTo(BigDecimal.valueOf(result),new BigDecimal("1E-20")));
根据最新的 Rest Assured 规则,我们将获得舍入值 directly.However 如果您想在没有舍入逻辑的情况下验证精确的 JSON repose(在银行应用程序中),那么我们必须使用下面的代码:-
BigDecimal xyz=JsonPath.with(response.asString()).using(new JosnPathConfig.NumberReturnType.BigDecimal)).get("JSON PATH")
这里的 response=JSON response 和 JSON PATH 只不过是要通过 response 验证的确切 json 文件。
我想用 Rest Assured 测试我的休息服务,但是当服务 returns 负零值时我的测试失败了。
放心测试:
String methodName="multiply";
float[] operands = {1f,-2.5f,0};
float result = operands[0] * operands[1] * operands[2];
Response response = given().
pathParam("a",operands[0]).
pathParam("b",operands[1]).
pathParam("c",operands[2]).
contentType(JSON).
log().ifValidationFails().
when().
get("/"+methodName+"/{a}/{b}/{c}").
then().
assertThat().statusCode(200).
body("result",equalTo(result));
错误:
java.lang.AssertionError: JSON path result doesn't match.
Expected: <-0.0F>
Actual: 0.0
结果json:
{"result":-0.0}
为什么我的休息服务 returns 负零值时测试失败?
我发现最好将 REST Assured 配置为 return 所有 Json 数字作为 BigDecimal,然后使用 hamcrest closeTo 匹配器。
String methodName="multiply";
double[] operands = {1,-2.5,0};
double result = operands[0] * operands[1] * operands[2];
Response response = given().
config(RestAssured.config().jsonConfig(jsonConfig().numberReturnType(BIG_DECIMAL))).
pathParam("a",operands[0]).
pathParam("b",operands[1]).
pathParam("c",operands[2]).
contentType(JSON).
log().ifValidationFails().
when().
get("/"+methodName+"/{a}/{b}/{c}").
then().
assertThat().statusCode(200).
log().ifValidationFails().
body("result",closeTo(BigDecimal.valueOf(result),new BigDecimal("1E-20")));
根据最新的 Rest Assured 规则,我们将获得舍入值 directly.However 如果您想在没有舍入逻辑的情况下验证精确的 JSON repose(在银行应用程序中),那么我们必须使用下面的代码:-
BigDecimal xyz=JsonPath.with(response.asString()).using(new JosnPathConfig.NumberReturnType.BigDecimal)).get("JSON PATH")
这里的 response=JSON response 和 JSON PATH 只不过是要通过 response 验证的确切 json 文件。