我是 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/