如何使用Groovy的mock.interceptor包来模拟对象构造函数?

时间:2009-04-13 16:29:23

标签: groovy mocking

我尝试使用mock.interceptor包模拟Groovy中的对象:

def mock = new MockFor(TheClass);
mock.demand.theMethod{ "return" }
mock.use {
    def underTest = new TheClass()
    println underTest.theMethod()
}

我遇到的问题是在TheClass()块中创建use{时,它使用实际的构造函数,在这种情况下,我宁愿不使用它。如何创建此类的实例,以便我可以测试我关心的方法theMethod,而无需使用构造函数?

使用EasyMock / CE,可以在不使用构造函数的情况下进行模拟,但很好奇如何在Groovy中实现它。

2 个答案:

答案 0 :(得分:2)

我最近看到了GMock的作者的一个演示文稿,它有一些钩子允许“构造函数”嘲笑,我认为这就是你所追求的。

e.g。

 def mockFile = mock(File, constructor('/a/path/file.txt'))

这个库与“内置”不同于groovy,但它看起来写得非常好,有些想法被用于你想要模拟的东西,更重要的是你在测试失败时会得到的错误信息。 / p>

我认为这就是你所追求的。我会说使用构造函数小心谨慎 - 它可能是一种气味,你应该注入一个Factory对象,但对于某些东西,它看起来运作良好。

答案 1 :(得分:1)

调用MockFor时可以使用interceptConstruction标志,请参阅 MockFor