【发布时间】:2016-02-21 18:27:36
【问题描述】:
我在开发测试时遇到了一个错误。我尝试了很多东西,但每次都失败了。
这是我的 JSON:
{
"evenement": [
{
"dateDebut": "2016-02-20T00:00:00-05:00",
"dateFin": "2016-02-21T00:00:00-05:00",
"id": "28",
"tirages": [
{
"dateDebut": "2016-02-20T00:00:00-05:00",
"dateFin": "2016-02-20T00:00:00-05:00",
"description": "Un super prix1",
"id": "27",
"titre": "A Gagner1"
},
{
"dateDebut": "2016-02-21T00:00:00-05:00",
"dateFin": "2016-02-21T00:00:00-05:00",
"description": "Un super prix2",
"id": "28",
"titre": "A Gagner2"
}
]
},
{
"dateDebut": "2016-03-20T00:00:00-04:00",
"dateFin": "2016-03-21T00:00:00-04:00",
"id": "29",
"tirages": {
"dateDebut": "2016-03-20T00:00:00-04:00",
"dateFin": "2016-03-20T00:00:00-04:00",
"description": "Un super prix3",
"id": "29",
"titre": "A Gagner3"
}
}
]}
这是我的测试:
ArrayList<String> alDescr1 = new ArrayList<String>();
alDescr1.add("Un super prix1");
alDescr1.add("Un super prix2");
ArrayList<Object[]> alDescr2 = new ArrayList<Object[]>();
alDescr2.add(alDescr1.toArray());
ArrayList<String> alDescr3 = new ArrayList<String>();
alDescr3.add("Un super prix3");
alDescr2.add(alDescr3.toArray());
expect().statusCode(200)
.body(
"evenement.tirages.description", hasItems(alDescr1.toArray(), alDescr2.toArray())
).when().get("/rest/amc-events/all");
这是错误:
java.lang.AssertionError: 1 expectation failed.
JSON path evenement.tirages.description doesn't match.
Expected: (a collection containing ["Un super prix1", "Un super prix2"] and a collection containing [["Un super prix1", "Un super prix2"], ["Un super prix3"]])
Actual: [[Un super prix1, Un super prix2], Un super prix3]
实际上,我尝试检查一个元素是否具有 [Un super prix1, Un super prix2] 和另一个元素是否具有“Un super prix3”。但是如果有一种方法可以只检查元素是否存在,不管第一个元素是否有 2 个,那就太好了。
谢谢 值
【问题讨论】:
-
在我看来,JSON api 响应似乎应该将第三个 tirages 项放在一个数组中,而不仅仅是一个原始的单个 jsonobject。如果您无法更改,那么您可以调整您的 json 访问器,以便您测试的所有 3 个项目在您的测试中都表示为非数组项目。如果我听起来很困惑,请调整您的问题。
-
我可以更改JSON响应,所以我会看看。对于 json 访问器,我理解并且如果可能的话我想这样做,但我不知道怎么做。你有例子吗?
标签: java web-services rest unit-testing rest-assured