Groovy中CallSpec的range参数的作用是什么?官方文档过于简略难理解
Groovy Mock 框架中CallSpec的range属性作用详解
核心功能定位
range是CallSpec用于约束被Mock方法 预期调用次数合法区间 的核心配置项,所有针对方法调用频次的匹配校验逻辑,都会围绕该参数定义的范围展开。
具体行为规则
- 参数接收Groovy原生的整数范围(IntRange)类型值,定义的区间规则完全遵循Groovy原生范围的语法,支持闭区间、左闭右开区间等常见写法
- 测试校验阶段会统计被Mock方法的实际调用次数,只有实际次数落在range定义的区间内,才算符合预期行为;超出区间范围会直接抛出调用次数不匹配的测试异常
典型配置对应的实际效果
- 配置
range: 1..3:方法被调用1次、2次、3次均属于合规状态,调用0次或4次及以上会触发校验失败 - 配置
range: 0..0:等价于约束方法完全不允许被调用,只要触发1次就会校验失败 - 配置
range: 2..<10:即Groovy支持的左闭右开范围定义,代表调用次数在2次到9次之间都符合要求
与常用频次便捷方法的关联
日常编写Mock代码时用到的各类频次配置方法,本质都是对range参数的语法糖封装:
times(n):等价于设置range: n..n,要求调用次数必须严格等于指定值atLeast(n):等价于设置range: n..Integer.MAX_VALUE,要求调用次数不低于指定值,无上限约束atMost(n):等价于设置range: 0..n,要求调用次数不高于指定值,最低可以为0次
常见认知误区
- range属性和方法入参的取值范围、调用的时间窗口没有任何关联,完全是面向调用频次的校验配置,不会干预方法的实际入参匹配逻辑
- range的校验逻辑会在测试交互全部完成后的统一断言阶段触发,不会在方法每次被调用时即时打断测试流程
内容的提问来源于stack exchange,提问作者wangshuaijie
相关产品推荐
相关产品推荐

