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保证一起使用吗?
我不是 100% 确定我是正确的,但是这篇文章太长了,无法发表评论......
通过阅读Hamcrest 和REST 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。
| 归档时间: |
|
| 查看次数: |
2320 次 |
| 最近记录: |