0

我正在使用 grails 1.3.7。

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

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

请我要求你们所有人尽快回答,因为我被这些疑问所困扰。在此先感谢,并等待积极的答复。

谢谢

4

3 回答 3

3

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

mockDomain(YourDomain)

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

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

那么你可以这样做:

assert instance == YourDomain.findByName('foo')
于 2013-03-20T17:17:50.667 回答
1

有人用 Grails 4.0.0 和 Spock 更新了这个问题吗?因为它似乎没有有效的动态查找器。

于 2019-09-25T23:01:44.357 回答
0

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

def someDomainMock = new GrailsMock(SomeDomain)
someDomainMock.demand.static.findByName(1..1) { String name ->
    [new SomeDomain(name: name + '_1'), new SomeDomain(name: name + '_2')]
}
于 2013-03-20T10:02:38.570 回答