groovy - 无法 stub @Shared字段

标签 groovy spock

我是 spock 的新手,正在尝试尝试一些简单的模拟和 stub 。在玩了一下时,我注意到我无法 stub 或模拟 @Shared 字段。我在文档中找不到任何此类提及。我在 setupSpec() 或 setup() 的工作方式中遗漏了什么吗?

package com.rsa.netwitness.cloud

import spock.lang.Shared
import spock.lang.Specification

class MySpecification extends Specification {

    @Shared MyPojo pojo

    MyPojo pojo2

    def setup(){
        pojo2 = Mock(MyPojo)
    }
    def setupSpec(){
        pojo = Mock(MyPojo)
    }

    def "example 1"(){
        given:
        pojo.getValue() >> "foobar"

        expect: "fails"
        pojo.getValue() == "foobar"
    }

    def "example 2"(){
        given:
        pojo2.getValue() >> "foobarbaz"

        expect: "works"
        pojo2.getValue() == "foobarbaz"
    }

}

class MyPojo {

    public String value ;

    public String getValue(){
        return value ;
    }
}

最佳答案

Spock不支持此功能,请阅读this欲了解更多信息。

将模拟/ stub 定义为@Shared没有任何好处。此外,如果可以的话,您应该避免 @Shared,因为会破坏测试隔离。仅将其用于创建成本高昂的事物,并尽量避免改变它们。

关于groovy - 无法 stub @Shared字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47422403/

相关文章:

date - Groovy 无法将字符串解析为日期

groovy - 获取当月的最后一天

grails DefaultGrailsDomainClass.getIdentifier 总是返回 'id 作为标识符

grails - 使用@Stepwise时,Grails 2.3.6 IntegrationSpec Spock测试无法修改controller.request.JSON

java - Spock 中 TestNG 数据提供者的模拟

testing - 当 Spock 测试失败时执行一些操作

testing - Spock:如何在数据管道中输入字符串值

android - 将Kotlin DSL转换回Groovy?

grails - 如何在Grails单元测试中模拟Ajax请求

java - Spock 中最终类的模拟实例在测试和开发代码中的行为不同