Kotlin 放心集合匹配器

Kotlin rest-assured collection matcher

谁能帮忙解决一下 right restassured matcher 问题? 我有一条自定义错误消息,由休息控制器建议返回。它包含一个 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不适合这种情况。我试过使用其他匹配器,但我得到了同样的错误...... 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")));