Spock测试中多结果对象的名称匹配优化问询
Spock测试中批量对比结果name字段的优化方案
你当前的代码仅能处理结果数量为1或2的场景,要支持任意数量的结果对比,完全可以利用Groovy的集合特性简化逻辑,无需写冗余的分支判断。
优化方案1:使用any()方法遍历判断
直接通过集合的any()方法检查是否存在符合条件的元素,不管结果数量多少都能覆盖:
then: "Container Results" result.containing.any { it.name == contains }
any()会遍历containing数组中的每一个元素,只要有一个元素的name等于目标值contains,断言就会通过。
优化方案2:提取name集合后用contains()判断
利用Groovy的展开运算符*.提取所有元素的name属性,生成字符串集合后直接检查目标值是否存在:
then: "Container Results" result.containing*.name.contains(contains)
这种写法更简洁,可读性也更强。
可选:额外校验结果数量
如果需要同时验证结果的数量是否符合预期(比如确保返回了3个结果),可以添加一行断言:
then: "Container Results" result.containingCount == 3 // 替换为你的预期数量 result.containing*.name.contains(contains)
内容的提问来源于stack exchange,提问作者rvz
相关产品推荐
相关产品推荐

