2010-11-26 27 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

相关问题