[英]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
自然,作為一個單例,該實例不會改變(至少在理論上是這樣)...因此,以這種方式覆蓋的方法實際上是全局的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.