使用参数化斯波克框架的行为测试



我有一组行为测试,应该会得到相同的结果

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

then:
data == 'Hi'
where:
name | route
'A'  | doA()
'B'  | doB()
}

有办法做到吗?

您可以使用闭包来提取要在when块中执行的代码。

class ClosureSpec extends Specification {
@Unroll
def 'behaviour tests for route #name'() {
when:
def data = route()
then:
data == 'Hi'
where:
name | route
'A'  | { doA() }
'B'  | { doB() }
}
def doA() {
return 'Hi'
}
def doB() {
return 'Hi'
}
}

或者您可以使用groovys的动态特性传入方法名称

class DynamicSpec extends Specification {
@Unroll
def 'behaviour tests for route #name'() {
when:
def data = this."do$name"()
then:
data == 'Hi'
where:
name | route
'A'  | _
'B'  | _
}
def doA() {
return 'Hi'
}
def doB() {
return 'Hi'
}
}

根据使用情况,我会使用闭包,但动态方法名称有其用途,尤其是如果您想传入参数的话。

最新更新