[英]How do I create a detached mock with closure in Spock framework?
很高興看到我們可以從 Spock 1.1 開始分離模擬,特別是如果我們想為樣板 UT 編碼創建模擬實用程序。
但似乎 DetachedMockFactory 拒絕使用關閉進行初始化。
class MockUtils {
def mockFactory = new DetachedMockFactory()
IRequestContextGetter mockDefaultRequestContext() {
return mockFactory.Mock(IRequestContextGetter) {
tenant >> Constants.TENANT
currencyType >> CurrencyEnum.SGD
}
}
}
它拋出以下錯誤:
“spock.mock.DetachedMockFactory”中的“模擬”不能應用於“(java.lang.Class<com.bytedance.cg.gcrm.salesplanning.common.utils.requestcontext.IRequestContextGetter>, groovy.lang.Closure)”
如何創建帶閉包的獨立模擬?
簡短的回答,你不能。
更長的答案,在 Spock 中,模擬交互實際上是規范的一部分,而不是模擬對象本身。 因此,分離的模擬在附加到規范之前不能進行任何交互。
方法是有的,但是比較麻煩。 您可以定義自己的IDefaultResponse來處理模擬交互並以這種方式自定義您的響應。
import org.spockframework.util.*
import org.spockframework.mock.*
import spock.mock.*
interface Foo {
String getBar()
}
class CustomResponse implements IDefaultResponse {
public Object respond(IMockInvocation invocation) {
'foo'
}
}
def factory = new DetachedMockFactory()
def stub = factory.Stub(Foo, defaultResponse: new CustomResponse())
assert stub.bar == 'foo'
在Groovy Web 控制台中試用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.