簡體   English   中英

如何在 Spock 框架中創建帶閉包的分離模擬?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM