2010-11-26 65 views
0

我正在使用groovy爲測試用例創建一些模擬類。我基本上創建虛擬對象,其中所有的方法返回null,以便我可以運行我的測試用例。在Groovy中使用私有構造函數將對象封閉映射到對象

我使用的語法如下:

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

所以在這裏我想用我的覆蓋假冒工廠對象的單個實例。 的問題是MessageFactory的構造函數碰巧是一個私有方法。當我運行上面的代碼時,這給我一個illigal訪問異常。有沒有一個我可以在groovy中創建代理並克服私有構造函數的問題?

回答

1

如果您有機會獲得的MessageFactory,並願意修改它,然後使用標準的依賴注入的解決方案,詳見這裏:mock singleton ..Though它並不特別的Groovy

否則,我已經找到了最好的解決方法是在單實例本身覆蓋的方法(S),像這樣:

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


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

test.method() // Now returns null 

當然,作爲一個單身,這種情況不會改變(至少在理論上)...因此,以這種方式壓倒一切的方法實際上是全球性的。

編輯:或者你可以使用GMock,它支持構造函數模擬(除其他外)。

+0

gmock看起來不錯,謝謝! – mkoryak 2010-11-29 21:01:59

相關問題