簡體   English   中英

在Groovy中使用私有構造函數將閉包映射轉換為對象

[英]cast closure map to object with a private constructor in groovy

我正在使用groovy為測試用例創建一些模擬類。 我基本上是在創建所有方法都返回null的虛擬對象,以便我可以運行測試用例。

我正在使用以下語法:

MessageFactory.instance = ["getMessage": {a,b,c,d -> "dummy"}] as MessageFactory

所以在這里我試圖用我的假工廠對象覆蓋單例實例。 問題在於MessageFactory的構造函數恰好是私有方法 當我運行上面的代碼時,這給了我一個非法訪問異常。 我可以用Groovy創建代理並克服私有構造函數問題嗎?

如果您有權訪問MessageFactory並願意對其進行修改,則可以使用標准的依賴項注入解決方案,如下所示: 模擬單例 ..盡管不是特別Groovy

否則,我發現的最佳解決方法是重寫單例實例本身上的方法,如下所示:

@Singleton
class Test{
    def method(){"Unmocked method called"}
}


def test = Test.instance
test.metaClass.method = {-> null}

test.method() // Now returns null

自然,作為一個單例,該實例不會改變(至少在理論上是這樣)...因此,以這種方式覆蓋的方法實際上是全局的。

編輯:或者,您可以使用GMock ,它支持構造函數模擬 (以及其他功能)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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