Groovy 无法存根@共享字段

Groovy 无法存根@共享字段,groovy,spock,Groovy,Spock,我是斯波克的新手,尝试用一些简单的模拟和存根进行实验。在玩的时候,我注意到我不能存根或模拟@Shared字段。我在文件中找不到任何这样的提及。setupSpec()或setup()的工作方式中是否有我遗漏的东西 这应该起作用: class MySpecification extends Specification { @Shared MyPojo pojo = Mock(MyPojo) def setupSpec(){ pojo.getValue() >

我是斯波克的新手,尝试用一些简单的模拟和存根进行实验。在玩的时候,我注意到我不能存根或模拟@Shared字段。我在文件中找不到任何这样的提及。setupSpec()或setup()的工作方式中是否有我遗漏的东西

这应该起作用:

class MySpecification extends Specification {

    @Shared MyPojo pojo = Mock(MyPojo)

    def setupSpec(){
        pojo.getValue() >> "foobar"
    }

    def "example 1"(){
        expect: 
        pojo.getValue() == "foobar"
    }
}

class MyPojo {


    public String value ;

    public String getValue(){
        return value ;
    }
}
编辑:

这也将有助于:

class MySpecification extends Specification {

    @Shared MyPojo pojo = Mock(MyPojo) {
        getValue() >> 'foobar'
    }

    def "example 1"(){
        expect: 
        pojo.getValue() == "foobar"
    }
}

Spock不支持这一点,请阅读了解更多信息


将mock/stub定义为
@Shared
没有任何好处。此外,如果可以,您应该避免
@Shared
,因为中断测试隔离。仅将其用于成本高昂的创建,并尽量避免对其进行变异。

我更感兴趣的是它为什么不起作用。这和斯波克的工作方式有关吗?“我更感兴趣的是为什么它不工作。”-我错了。我只是重读了你的问题,我发现你没有问怎么做。请不要理会,我为这噪音道歉。
class MySpecification extends Specification {

    @Shared MyPojo pojo = Mock(MyPojo) {
        getValue() >> 'foobar'
    }

    def "example 1"(){
        expect: 
        pojo.getValue() == "foobar"
    }
}