在grails单元测试中模拟动态查找器

时间:2013-03-20 08:51:06

标签: unit-testing grails

我正在使用grails 1.3.7。

在为我的控制器编写单元测试时,我收到错误,因为我在控制器中的操作使用动态查找器,例如“findByName('ABC')”。 我知道我也需要嘲笑动态查找器,我尝试了那个东西。但遗憾的是没有成功。 我请求你帮我解决我需要使用的确切模拟片段。 此外,对于所有这些嘲弄的事情,请建议一些具有所有这些的文档URL。

另外,在我的grails应用程序中,我将三个域之间的关联称为“hasMany和belongsTo”。因此,在为控制器编写单元测试时,请建议我如何模拟这些域类。

请尽快请求大家回答,因为我对这些疑惑感到困惑。 提前致谢, 并等待积极的答案。

谢谢

3 个答案:

答案 0 :(得分:3)

如果name是域的属性,那么动态查找器将在mock the domain时“自动”被模拟。你应该能够做到:

mockDomain(YourDomain)

此时您将返回null,因此如果您希望该查询返回它们,请创建一些实例:

YourDomain instance = new YourDomain(name: 'foo')
mockDomain(YourDomain, [instance])

然后你可以这样做:

assert instance == YourDomain.findByName('foo')

答案 1 :(得分:0)

要模拟域动态查找器,请尝试:

def someDomainMock = new GrailsMock(SomeDomain)
someDomainMock.demand.static.findByName(1..1) { String name ->
    [new SomeDomain(name: name + '_1'), new SomeDomain(name: name + '_2')]
}

答案 2 :(得分:0)

有人使用Grails 4.0.0和Spock对此问题进行了更新吗?因为它似乎没有动态的查找器。