无法存根 @Shared 字段
Unable to stub @Shared fields
我是 spock 的新手,正在尝试使用一些简单的模拟和存根进行试验。玩了一会儿,我注意到我无法存根或模拟 @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 ;
}
}
这应该有效:
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 不支持此功能,请阅读 this 了解更多信息。
将 mocks/stubs 定义为 @Shared
没有任何好处。此外,如果可以的话,你应该避免使用 @Shared
,因为这会破坏测试隔离。仅将其用于创建成本高昂的事物,并尽量避免改变这些事物。
我是 spock 的新手,正在尝试使用一些简单的模拟和存根进行试验。玩了一会儿,我注意到我无法存根或模拟 @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 ;
}
}
这应该有效:
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 不支持此功能,请阅读 this 了解更多信息。
将 mocks/stubs 定义为 @Shared
没有任何好处。此外,如果可以的话,你应该避免使用 @Shared
,因为这会破坏测试隔离。仅将其用于创建成本高昂的事物,并尽量避免改变这些事物。