【问题标题】:Share data tables between Spock test methods在 Spock 测试方法之间共享数据表
【发布时间】:2016-01-02 03:10:39
【问题描述】:

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

    }

}

【问题讨论】:

  • 如果您觉得我的回答有用,请采纳。
  • @Opal 非常感谢您的发帖。我花了一些时间进一步研究这个问题,发现了 Spock 扩展,这可能是我需要的。

标签: testing spock


【解决方案1】:

不,没有这样的方法。 where 块必须出现在使用数据驱动测试的方法的末尾。

【讨论】:

    【解决方案2】:

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

    粗略地说,并且需要注意的是我实际上并没有尝试过以下方法,因此可能需要一种方法:

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

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

    【讨论】:

      猜你喜欢
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多