6

我是 spock 的新手,注意到设置:规范中的步骤仅限于该特定测试。与传统的 junit 方法类似,我如何在这些装置之间共享设置?

谢谢你!

def "setup with spock"() {
    setup:
    def message = new FooMessage()
    def sut = new FooProcessor()
    def builder = Mock(FooBuilder)
    sut.setBuilder(builder)

    when:
    builder.buildFooUsing(_) >> {"bar"}
    def result = sut.process(message)

    then:
    assert result == "bar"
  }
4

2 回答 2

4

如果您想跨测试共享单个对象,您应该使用 setupSpec() 或查看 @Shared 注释

于 2011-08-10T12:51:59.223 回答
1

来自 Spock 文档

1.3.4迭代之间的对象共享

为了在迭代之间共享一个对象,它必须保存在 @Shared 或静态字段中。

注意:只能从 where: 块中访问 @Shared 和静态变量。

请注意,此类对象也将与其他方法共享。目前没有在同一方法的迭代之间共享对象的好方法。如果您认为这是一个问题,请考虑将每个方法放入单独的规范中,所有这些都可以保存在同一个文件中。这以一些样板代码为代价实现了更好的隔离。

于 2015-03-10T12:35:04.820 回答