Testing 与Hamcrest相比,重新加压

Testing 与Hamcrest相比,重新加压,testing,compare,double,rest-assured,hamcrest,Testing,Compare,Double,Rest Assured,Hamcrest,我有一件蠢事,但我真的看不出我错过了什么: 我有一个测试: @Test public void testeBerechneRendite() { get("/rendite?jahresnettomiete=8000&kaufpreis=100000&nebenkosten=500") .then().body(is(closeTo(0.079, 0.01))); } 错误是: Response body doesn't match expectation. E

我有一件蠢事,但我真的看不出我错过了什么:

我有一个测试:

@Test
public void testeBerechneRendite() {
    get("/rendite?jahresnettomiete=8000&kaufpreis=100000&nebenkosten=500")
    .then().body(is(closeTo(0.079, 0.01)));
}
错误是:

Response body doesn't match expectation.
Expected: is a numeric value within <0.01> of <0.079>
Actual: 0.07960199004975124
这是我不明白的两倍,双重。据我所知,0.069和0.089之间的所有数字都应该是有效的。如果我完全错了,请澄清:-

实际值:0.07960199004975124-这是一个字符串值,这就是为什么您的匹配器不工作。您需要提取值,转换为double,并在单独的数学工具中进行比较

MatcherAssert.assertThat(
    Double.parseDouble(get("/rendite?jahresnettomiete=8000&kaufpreis=100000&nebenkosten=500")
    .then().extract().jsonPath().getString("args.val")),
    closeTo(0.079, 0.01)
);
实际值:0.07960199004975124-这是一个字符串值,这就是您的匹配器无法工作的原因。您需要提取值,转换为double,并在单独的数学工具中进行比较

MatcherAssert.assertThat(
    Double.parseDouble(get("/rendite?jahresnettomiete=8000&kaufpreis=100000&nebenkosten=500")
    .then().extract().jsonPath().getString("args.val")),
    closeTo(0.079, 0.01)
);