当Spock规范中的测试方法使用相同的数据时,是否有一种快捷方式可以不必在每种方法中重复相同的where
块?
实际上,这相当于具有规范级where
而不是每个“功能”一个。
例如,请参阅下面每个测试方法(“功能”)中重复where块的方式:
ReindeerSpec extends Specification {
List<Reindeer> reindeers() {
[makeReindeerOneWay('donner'), makeReindeerSomeOtherWay('blitzen')]
}
def 'some test'(Reindeer reindeer) {
expect:
// some thing about this reindeer
where:
reindeer << reindeers()
}
def 'some other test'(Reindeer reindeer) {
expect:
// some other thing about this reindeer
where:
reindeer << reindeers()
}
}
答案 0 :(得分:2)
不,没有这样的方式。在使用数据驱动测试的方法结束时,where
块必须存在。
答案 1 :(得分:1)
@Opal是正确的 - 没有开箱即用的方法来做到这一点。但是,经过额外的挖掘,我发现Spock有一个丰富的扩展API。缺点是官方文档不存在,示例很少,往往会有几年的历史。
粗略地说,并且我实际上没有尝试过以下的警告,可能需要采取一种方法:
实现ExtensionAnnotation和关联的AbstractAnnotationDrivenExtension。调用AbstractAnnotationDrivenExtension.visitSpec()时,修改SpecInfo,向每个FeatureInfo添加DataProviderInfo。注释将应用一次,可能在Spec级别,或者可能在数据提供方法上应用(在我的示例中为reindeers()
。
如果有实施扩展经验的人关心这种方法或提供更好的选择,我将非常感激。