初始化 Spock 存根时'setup'和'setupSpec'的区别?



我对存根初始化感到困惑setup()setupSpec(), 演示:

class SpockTestSpec extends Specification {
@Shared Service service
@Shared MsgClient msgClient
@Shared QueryResult queryResult
def setupSpec() {
msgClient = Stub(MsgClient)
queryResult = Stub(QueryResult)
service = new Service(msgClient: msgClient)
}
def "test1"() {
given:
def msg = "hello world"
def queryId = "abc123"
queryResult.getQueryId() >> queryId
msgClient.submitAsync(_) >> queryResult
when:
def resp = service.query(msg)
then:
resp.getMsg() == msg
resp.getQueryId() == queryId
}
}

它不能工作,因为存根查询结果返回"",它需要一个查询 Id。 当我使用setup()时,它运行良好:

class SpockTestSpec extends Specification {
@Shared Service service
@Shared MsgClient msgClient
@Shared QueryResult queryResult
def setup() {
msgClient = Stub(MsgClient)
queryResult = Stub(QueryResult)
service = new Service(msgClient: msgClient)
}
def "test1"() {
given:
def msg = "hello world"
def queryId = "abc123"
queryResult.getQueryId() >> queryId
msgClient.submitAsync(_) >> queryResult
when:
def resp = service.query(msg)
then:
resp.getMsg() == msg
resp.getQueryId() == queryId
}
}

setup()setupSpec()中的初始化存根有什么区别?

Spock 目前的限制是您无法创建可用的@Shared模拟。模拟创建起来很便宜,所以没有理由分享它们。它将在测试之间引入不必要的耦合。如本期所述,有一种解决方法,但我强烈建议不要这样做。

最新更新