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

时间:2016-01-02 03:10:39

标签: testing spock

当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()

    }

}

2 个答案:

答案 0 :(得分:2)

不,没有这样的方式。在使用数据驱动测试的方法结束时,where块必须存在。

答案 1 :(得分:1)

@Opal是正确的 - 没有开箱即用的方法来做到这一点。但是,经过额外的挖掘,我发现Spock有一个丰富的扩展API。缺点是官方文档不存在,示例很少,往往会有几年的历史。

粗略地说,并且我实际上没有尝试过以下的警告,可能需要采取一种方法:

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

如果有实施扩展经验的人关心这种方法或提供更好的选择,我将非常感激。