0

我正在使用 groovy 为测试用例创建一些模拟类。我基本上是在创建所有方法都返回 null 的虚拟对象,以便我可以运行我的测试用例。

我正在使用以下语法:

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

所以在这里我试图用我的假工厂对象覆盖单例实例。问题是 MessageFactory 的构造函数恰好是一个私有方法。当我运行上面的代码时,这给了我一个非法访问异常。有没有我可以在 groovy 中创建代理并克服私有构造函数问题的方法?

4

1 回答 1

1

如果您有权访问 MessageFactory,并且愿意对其进行修改,那么您可以使用标准的依赖注入解决方案,如下所述:mock singleton ..虽然它不是特别Groovy

否则,我发现的最佳解决方法是覆盖单例实例本身的方法,如下所示:

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


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

test.method() // Now returns null

自然地,作为一个单例,这个实例不会改变(至少在理论上)......所以,以这种方式覆盖方法实际上是全局的。

编辑:或者您可以使用GMock,它支持构造函数模拟(除其他外)。

于 2010-11-26T20:13:01.473 回答