Kotlin 放心的集合匹配器
Posted
技术标签:
【中文标题】Kotlin 放心的集合匹配器【英文标题】:Kotlin rest-assured collection matcher 【发布时间】:2021-12-27 16:11:52 【问题描述】:任何人都可以帮助正确的放心匹配器吗?
我有一条自定义错误消息,由休息控制器建议返回。它包含一个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 不适合这种情况。我尝试使用其他 Matcher,但我得到了同样的错误...... 附:索引方法工作正常,但恕我直言,它有点难看......
body("meta[0].code", equalTo("code"))
body("meta[0].description", equalTo("description"))
我试图解决这个问题几个小时,但我完全卡住了......有什么想法吗?
【问题讨论】:
因为这是 LinkedHashMap,而不是你的 ErrorDto。 【参考方案1】:问题: 据我所知,RestAssured 会映射
数组(json)列表(java) 对象(json) LinkedHashMap(java)因此,body("meta")
--> 返回 LinkedHashMap 列表。您无法将 Object 与 LinkedHashMap 进行比较。
解决方案:
要制作一个 ErrorDto 列表,你需要告诉 RestAssured 将被转换成哪种类型。
以下是java版本。
List<ErrorDto> list = response.jsonPath().getList("", ErrorDto.class);
那你就可以用 Hamcrest 来断言了
assertThat(list, hasItems(new ErrorDto("code", "description")));
【讨论】:
应该合适,谢谢!以上是关于Kotlin 放心的集合匹配器的主要内容,如果未能解决你的问题,请参考以下文章