我尝试使用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中实现它。
答案 0 :(得分:2)
我最近看到了GMock的作者的一个演示文稿,它有一些钩子允许“构造函数”嘲笑,我认为这就是你所追求的。
e.g。
def mockFile = mock(File, constructor('/a/path/file.txt'))
这个库与“内置”不同于groovy,但它看起来写得非常好,有些想法被用于你想要模拟的东西,更重要的是你在测试失败时会得到的错误信息。 / p>
我认为这就是你所追求的。我会说使用构造函数小心谨慎 - 它可能是一种气味,你应该注入一个Factory对象,但对于某些东西,它看起来运作良好。
答案 1 :(得分:1)
调用MockFor时可以使用interceptConstruction标志,请参阅 MockFor