在 Json repsonse 字段值上使用 restassured 获取 assertionError 并且预期和实际相同
Getting assertionError using restassured on Json repsonse field value and the expected and actual are identical
这是我收到回复后的代码。
response.then().assertThat().body("documents[0].items[0].price.sales_tax_summary[0].rate",equalTo("0.0"));
这是响应日志:
{
"id": "quote-1",
"documents": [
{
"id": "document-1",
"items": [
{
"id": "2",
"price": {
"amount_inclusive": 200000.5,
"amount_exclusive": 200000.5,
"total_tax": 0.0,
"tax_rate": 0.0,
"sales_tax_summary": [
{
"rate": 0.0,
"amount": 0.0
},
{
"rate": 0.0,
"amount": 0.0
}
]
}
}
],
"shipping": {
"id": "3",
"price": {
"amount_inclusive": 15.0,
"amount_exclusive": 15.0,
"total_tax": 0.0,
"tax_rate": 0.0,
"sales_tax_summary": [
{
"rate": 0.0,
"amount": 0.0
},
{
"rate": 0.0,
"amount": 0.0
}
]
}
},
"handling": {
"id": "4",
"price": {
"amount_inclusive": 5.0,
"amount_exclusive": 5.0,
"total_tax": 0.0,
"tax_rate": 0.0,
"sales_tax_summary": [
{
"rate": 0.0,
"amount": 0.0
},
{
"rate": 0.0,
"amount": 0.0
}
]
}
}
}
]
}
这是错误信息
java.lang.AssertionError: 1 expectation failed.
JSON path documents[0].items[0].price.sales_tax_summary[0].rate doesn't match.
Expected: 0.0
Actual: 0.0
我试过修剪,使用包含子字符串,将 0.0 作为双精度值而不是预期的字符串插入。但得到了同样的错误
将 String 与 double 进行比较是个问题。
试试这个:
double expectedRate = 0.0;
double actualRate = response.then().extract().jsonPath().getDouble("documents[0].items[0].price.sales_tax_summary[0].rate");
assertTrue(expectedRate == actualRate);
这将确保将它作为双精度而不是字符串与双精度进行比较,并且应该为您提供所需的结果。
你的 JSON returns 是一个双精度值,你正在将它与一个字符串进行比较,这就是你的断言失败的原因。比较两个字符串时使用 equalTo()。使用以下代码:
response.then().assertThat().body("documents[0].items[0].price.sales_tax_summary[0].rate"== 0.0)
这是我收到回复后的代码。
response.then().assertThat().body("documents[0].items[0].price.sales_tax_summary[0].rate",equalTo("0.0"));
这是响应日志:
{
"id": "quote-1",
"documents": [
{
"id": "document-1",
"items": [
{
"id": "2",
"price": {
"amount_inclusive": 200000.5,
"amount_exclusive": 200000.5,
"total_tax": 0.0,
"tax_rate": 0.0,
"sales_tax_summary": [
{
"rate": 0.0,
"amount": 0.0
},
{
"rate": 0.0,
"amount": 0.0
}
]
}
}
],
"shipping": {
"id": "3",
"price": {
"amount_inclusive": 15.0,
"amount_exclusive": 15.0,
"total_tax": 0.0,
"tax_rate": 0.0,
"sales_tax_summary": [
{
"rate": 0.0,
"amount": 0.0
},
{
"rate": 0.0,
"amount": 0.0
}
]
}
},
"handling": {
"id": "4",
"price": {
"amount_inclusive": 5.0,
"amount_exclusive": 5.0,
"total_tax": 0.0,
"tax_rate": 0.0,
"sales_tax_summary": [
{
"rate": 0.0,
"amount": 0.0
},
{
"rate": 0.0,
"amount": 0.0
}
]
}
}
}
]
}
这是错误信息
java.lang.AssertionError: 1 expectation failed.
JSON path documents[0].items[0].price.sales_tax_summary[0].rate doesn't match.
Expected: 0.0
Actual: 0.0
我试过修剪,使用包含子字符串,将 0.0 作为双精度值而不是预期的字符串插入。但得到了同样的错误
将 String 与 double 进行比较是个问题。
试试这个:
double expectedRate = 0.0;
double actualRate = response.then().extract().jsonPath().getDouble("documents[0].items[0].price.sales_tax_summary[0].rate");
assertTrue(expectedRate == actualRate);
这将确保将它作为双精度而不是字符串与双精度进行比较,并且应该为您提供所需的结果。
你的 JSON returns 是一个双精度值,你正在将它与一个字符串进行比较,这就是你的断言失败的原因。比较两个字符串时使用 equalTo()。使用以下代码:
response.then().assertThat().body("documents[0].items[0].price.sales_tax_summary[0].rate"== 0.0)