使用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
相关产品推荐
相关产品推荐

