Rest Assured使用hasKey校验响应data.year存在2001值报错如何解决
问题原因及解决方案
核心错误点
- 匹配器选型错误:你使用的
hasKey()是Hamcrest提供的Map结构校验匹配器,作用是判断Map对象是否包含指定键。但RestAssured执行body("data.year")时,会提取所有data数组元素下的year字段值,返回结果是数值类型的列表[2000, 2001, 2002, 2003, 2004, 2005],属于List结构而非Map结构,匹配逻辑完全不对应,因此抛出类型不匹配的异常。 - 参数类型不匹配:接口返回的year字段是数值类型,你传入
hasKey的参数是字符串"2001",就算匹配器用对,类型不一致也会导致校验失败。
修复代码
你需要改用校验列表包含指定元素的hasItem()匹配器,同时传入数值类型的2001作为参数,修改后的测试代码如下:
@Test public void sixTest() { FlowerList flowerList = new FlowerList(); Specification.installSpec(Specification.requestSpec(), Specification.responseSpec()); Response response = given() .when() .get("/api/unknown") .then() .log().all() // 替换为hasItem匹配器,传数值2001 .body("data.year", hasItem(2001)) .extract().response().as((Type) FlowerList.class); }
修复后即可正常校验data数组中是否存在year为2001的元素。
内容的提问来源于stack exchange,提问作者Otto Rahn
相关产品推荐
相关产品推荐

