如何利用Spock框架实现参数化测试优化重复行为测试代码
如何在Spock中实现路由行为的参数化测试?
当然可以实现!你想要的参数化测试在Spock框架里是完全支持的,不过需要调整一下写法,避免方法提前执行的问题。
原冗余测试代码
def 'behaviour tests for route A'() { when: doA() then: data == 'Hi' } def 'behaviour tests for route B'() { when: doB() then: data == 'Hi' } void doA(){ ... } void doB(){ ... }
优化后的参数化测试代码
@Unroll def 'behaviour tests for route #name'() { when: route.call() then: data == 'Hi' where: name | route 'A' | this.&doA 'B' | this.&doB } void doA(){ ... } void doB(){ ... }
关键说明
@Unroll注解:让每个参数化用例作为独立测试执行,测试名称会自动替换#name,方便查看每个路由的测试结果- 方法引用传递:使用
this.&doA而不是直接写doA(),后者会在where块初始化阶段就执行方法,破坏测试流程;方法引用则是传递方法的引用,在when块通过route.call()才执行 - 可选写法:也可以用闭包传递逻辑,效果相同:
where: name | route 'A' | { doA() } 'B' | { doB() }
内容的提问来源于stack exchange,提问作者nafas
相关产品推荐
相关产品推荐

