You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rest Assured测试Quarkus端点时断言匹配失败问题

解决Rest Assured测试Quarkus字谜端点的断言不匹配问题

问题原因

JSON数组在Rest Assured中默认被解析为List类型,而你测试代码里用setOf("silent")创建的是Set实例。尽管两者元素完全一致,但List和Set属于不同集合类型,equalTo断言会严格校验类型与内容,因此导致匹配失败。

解决方案

方案1:改用List匹配(最直接)

将断言中的setOf替换为listOf,和Rest Assured解析后的类型保持一致:

given()
  .pathParam("word", "listen")
.when()
  .get("/anagrams/{word}")
.then()
  .body("$", equalTo(listOf("silent")))

方案2:将响应List转为Set后断言

如果业务逻辑要求必须用Set校验,可先提取响应体转为List,再转换为Set进行断言:

val anagrams = given()
  .pathParam("word", "listen")
.when()
  .get("/anagrams/{word}")
.then()
  .extract()
  .jsonPath()
  .getList<String>("$")

assertThat(anagrams.toSet()).isEqualTo(setOf("silent"))

方案3:使用元素匹配器(不依赖集合类型)

若不需要严格校验集合类型,仅需确保包含目标元素,可使用hasItems或contains匹配器:

given()
  .pathParam("word", "listen")
.when()
  .get("/anagrams/{word}")
.then()
  // 校验包含指定元素(不关心顺序和集合类型)
  .body("$", hasItems("silent"))
  // 若响应顺序固定,可使用contains严格匹配顺序与元素
  .body("$", contains("silent"))

内容的提问来源于stack exchange,提问作者Muhammad Bekette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:02:35