对REST的困惑确保浮点比较

Gar*_*son 5 java floating-point json rest-assured

REST Assured 使用文档包含以下示例:

get("/lotto").then().body("lotto.lottoId", equalTo(5));
Run Code Online (Sandbox Code Playgroud)

好的,所以他们使用Hamcrest匹配器来比较int值5.

但他们有一节说默认使用REST Assured JSON解析器float而不是double,所以不12.12应该比较我应该比较12.12f:

get("/price").then().body("price", is(12.12f));
Run Code Online (Sandbox Code Playgroud)

等等,所以5上面的工作怎么样,这是一个int而不是一个double?JSON解析器是否对整数和非整数值使用不同的基元?

但它变得更加混乱.精通程序员知道你不应该直接比较浮点值(因为存储浮点值的方法很复杂等).相反,你应该使用Matchers.closeTo(double operand, double error)它提供一个误差范围.这是正确的方法.但是等等---即使我传入12.12fMatchers.closeTo(双操作数,双错误),是不是还要将它转换为double?这可以与REST保证一起使用吗?

Spa*_*701 3

我不是 100% 确定我是正确的,但是这篇文章太长了,无法发表评论......

通过阅读HamcrestREST Assured的文档,似乎equalTo只在返回 true 的情况下才返回Object.equalstrue:

[equalTo] 创建一个匹配器,当检查的对象在逻辑上等于指定的操作数时进行匹配(通过对检查的对象调用 Object.equals(java.lang.Object) 方法来确定)。

因此,由于 REST Assured 将浮点值表示为 float,并且仅当另一个对象是 a 时Double.equals才能返回,因此有必要使用 a而不是 a (因为输入将被装箱到对象中)。trueDoublefloatdouble

此外,REST Assured 文档中的浮点数部分似乎表明它仅适用于浮点值:

浮点数必须与 Java“float”原语进行比较。

我认为这意味着整数可以正确表示为整数。(文档中的其他示例似乎也表明了这一点)

如果您选择使用Matchers.closeTo而不是equalToor is(它本身称为equalTo),那么使用 adouble或 a应该没有关系float