Kotlin 放心的集合匹配器

Posted

技术标签:

【中文标题】Kotlin 放心的集合匹配器【英文标题】:Kotlin rest-assured collection matcher 【发布时间】:2021-12-27 16:11:52 【问题描述】:

任何人都可以帮助正确的放心匹配器吗? 我有一条自定义错误消息,由休息控制器建议返回。它包含一个meta 字段,其中存储有codedescription 的对象。

我正在编写一个测试,我正在尝试检查是否存在正确的元数据,所以:

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 放心的集合匹配器的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin常用Collection集合操作整理

Kotlin实战Kotlin中集合的创建

Kotlin实战Kotlin中集合的创建

Kotlin实战Kotlin中集合的创建

断言每个对象属性都匹配 kotlin 测试中的给定谓词

细说Kotlin工具函数及使用准则-转换函数map()过滤函数filter()聚合函数