Hamcrest报错中尖括号含义及匹配器选型问题咨询
问题解答
1. 报错中尖括号的含义
Hamcrest在输出匹配失败的详情时,会用尖括号<>包裹对象的字符串表示,用来明确区分不同类型的对象实例:
- 预期值里的
<70a1deec-...>是单个UUID对象的字符串形式,两个尖括号代表你预期的是两个独立元素 - 实际值里的
<[70a1deec-..., 7ccd5ad0-...]>是一个集合(List/数组)的字符串形式,方括号是集合本身的格式,外层尖括号表示这是一个整体的集合对象
你之前的写法相当于拿两个单独的UUID元素,和一个包含这两个UUID的集合做匹配,所以会触发不匹配的报错。
2. 合适的匹配器选择
你的接口响应是对象数组,通过"id" JSONPath会提取出所有对象的id,形成一个集合。根据需求选择对应的匹配器:
(1)如果id返回顺序固定,用contains
要求集合的元素顺序、数量和预期完全一致:
given() //... .assertThat() .body("id", contains(job1.getId(), job2.getId())) .statusCode(200);
(2)如果id返回顺序不固定,用containsInAnyOrder
只要求集合包含所有预期元素,不关心顺序:
given() //... .assertThat() .body("id", containsInAnyOrder(job1.getId(), job2.getId())) .statusCode(200);
注意要导入正确的Hamcrest静态匹配器:
import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsInAnyOrder;
内容的提问来源于stack exchange,提问作者Some_Person
相关产品推荐
相关产品推荐

