Testing 在Spock测试方法之间共享数据表

Testing 在Spock测试方法之间共享数据表,testing,spock,Testing,Spock,当Spock规范内的测试方法使用相同的数据时,是否有一种快捷方式可以不必在每个方法中重复相同的where块 实际上,这相当于拥有一个规范级别,其中,而不是每个“功能”一个 例如,参见以下每个测试方法(“特征”)中重复where块的方式: ReindeerSpec扩展了规范{ 驯鹿名录(){ [Makereindeeronway('donner'),makeReindeerSomeOtherWay('blitzen')] } def“一些测试”(驯鹿){ 期望: //关于驯鹿的一些事情 哪里: 驯

当Spock规范内的测试方法使用相同的数据时,是否有一种快捷方式可以不必在每个方法中重复相同的
where

实际上,这相当于拥有一个规范级别
,其中
,而不是每个“功能”一个

例如,参见以下每个测试方法(“特征”)中重复where块的方式:

ReindeerSpec扩展了规范{
驯鹿名录(){
[Makereindeeronway('donner'),makeReindeerSomeOtherWay('blitzen')]
}
def“一些测试”(驯鹿){
期望:
//关于驯鹿的一些事情
哪里:

驯鹿不,没有这样的方法。
在方法的末尾必须有一个
块。使用数据驱动测试。

@Opal是正确的-没有现成的方法可以做到这一点。但是,在进一步挖掘之后,我发现Spock有一个丰富的扩展API。缺点是官方文档不存在,而且例子很少,而且往往有好几年的历史

用非常粗略的话来说,我还没有尝试过以下方法,但有一点需要注意:

实现ExtensionAnnotation和关联的AbstractAnnotationDrivenExtension。调用AbstractAnnotationDrivenExtension.visitSpec()时,修改SpecInfo,向每个FeatureInfo添加DataProviderInfo。该注释将应用一次,可能在规范级别,也可能在数据提供方法上应用一次(在我的示例中,
reindeers()


如果有实施扩展经验的人愿意对这种方法发表意见或提供更好的替代方案,我将不胜感激。

如果您觉得我的答案有用,请接受。@Opal非常感谢您的发帖。我花了一些时间进一步研究了这一点,发现了Spock扩展,这可能正是我所需要的。
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()

    }

}