放心浮动负零

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 文件。