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

Hamcrest的Matchers.containsInAnyOrder断言不生效如何修复?

问题原因

你遇到的断言失败不是依赖配置问题,而是containsInAnyOrder方法的使用方式错误:
Hamcrest 1.3中Matchers.containsInAnyOrder的入参是单个元素的可变参数序列,而不是直接传入期望的集合对象。你直接把output1这个List作为参数传入时,方法会把整个List当成单个元素去匹配待校验集合的元素,自然会断言失败。

修复方案

方案1:将期望集合转为数组传入

直接调用List的toArray()方法把期望集合转为数组,匹配可变参数的方法签名即可,该方案会严格校验两个集合的元素完全一致(元素数量相同、没有多余/缺失元素),仅忽略顺序,完全符合你的需求:

Assert.assertThat(output, Matchers.containsInAnyOrder(output1.toArray()));

方案2:组合Matcher实现相同效果(可选)

如果需要更灵活的校验逻辑,可以组合多个Matcher实现同等效果:

// 先校验待校验集合包含期望集合的所有元素,再校验元素数量完全匹配
Assert.assertThat(output, both(Matchers.hasItems(output1.toArray())).and(Matchers.hasSize(output1.size())));
额外校验项

如果修改写法后仍然报错,可以检查以下两项:

  • 确认导包正确,导入的是org.hamcrest.Matchers,而非JUnit自带的旧版本Hamcrest类
  • 运行mvn dependency:tree检查测试依赖中是否还有其他未排除的Hamcrest子包依赖,避免版本冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 23:24:04