我是spock的新手,并试图尝试一些简单的Mocks和Stubs。在玩一下时,我注意到我无法存根或模拟@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 ;
}
}
答案 0 :(得分:1)
Spock不支持此功能,请阅读this以获取更多信息。
将模拟/存根定义为@Shared
没有任何好处。此外,如果你可以在休息时测试隔离,你应该避免@Shared
。仅用于创建成本高昂的东西,并尽量避免变异。
答案 1 :(得分:0)
这应该有效:
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"
}
}