Kotlin 放心集合匹配器
Kotlin rest-assured collection matcher
谁能帮忙解决一下 right restassured matcher 问题?
我有一条自定义错误消息,由休息控制器建议返回。它包含一个 meta
字段,该字段存储具有 code
和 description
的对象。
我正在编写一个测试,试图检查是否存在正确的元数据,因此:
body("meta", hasItem(ErrorDto(code = "code", description = "description")))
我收到一个错误:
java.lang.AssertionError: 1 expectation failed.
JSON path meta doesn't match.
Expected: a collection containing <ErrorDto(code=code,
description=description)>
Actual: <[{code=code, description=description}]>
看来hasItem不适合这种情况。我试过使用其他匹配器,但我得到了同样的错误......
P.S。索引方法工作正常,但恕我直言,它有点难看...
body("meta[0].code", equalTo("code"))
body("meta[0].description", equalTo("description"))
我花了几个小时试图解决这个问题,但我完全卡住了...有什么想法吗?
问题:
据我所知,RestAssured 将 map
- 数组 (json) <--> 列表 (java)
- object (json) <--> LinkedHashMap (java)
因此,body("meta")
--> return LinkedHashMap 列表。您无法将 Object 与 LinkedHashMap 进行比较。
解法:
要制作一个ErrorDto的列表,你需要告诉RestAssured将转换成哪种类型。
以下是java版本。
List<ErrorDto> list = response.jsonPath().getList("", ErrorDto.class);
然后就可以使用Hamcrest断言
assertThat(list, hasItems(new ErrorDto("code", "description")));
谁能帮忙解决一下 right restassured matcher 问题?
我有一条自定义错误消息,由休息控制器建议返回。它包含一个 meta
字段,该字段存储具有 code
和 description
的对象。
我正在编写一个测试,试图检查是否存在正确的元数据,因此:
body("meta", hasItem(ErrorDto(code = "code", description = "description")))
我收到一个错误:
java.lang.AssertionError: 1 expectation failed.
JSON path meta doesn't match.
Expected: a collection containing <ErrorDto(code=code,
description=description)>
Actual: <[{code=code, description=description}]>
看来hasItem不适合这种情况。我试过使用其他匹配器,但我得到了同样的错误...... P.S。索引方法工作正常,但恕我直言,它有点难看...
body("meta[0].code", equalTo("code"))
body("meta[0].description", equalTo("description"))
我花了几个小时试图解决这个问题,但我完全卡住了...有什么想法吗?
问题: 据我所知,RestAssured 将 map
- 数组 (json) <--> 列表 (java)
- object (json) <--> LinkedHashMap (java)
因此,body("meta")
--> return LinkedHashMap 列表。您无法将 Object 与 LinkedHashMap 进行比较。
解法:
要制作一个ErrorDto的列表,你需要告诉RestAssured将转换成哪种类型。
以下是java版本。
List<ErrorDto> list = response.jsonPath().getList("", ErrorDto.class);
然后就可以使用Hamcrest断言
assertThat(list, hasItems(new ErrorDto("code", "description")));