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

Unit testing 在grails单元测试中模拟动态查找器,unit-testing,grails,Unit Testing,Grails,我正在使用Grails1.3.7 在为我的控制器编写单元测试时,由于我在控制器中的操作使用了动态查找程序,例如“findByName('ABC')”,我得到了错误。 我知道我也需要模仿动态查找器,我也尝试过,但不幸的是没有成功。 我请求你帮我完成我需要使用的模拟片段。 此外,对于所有这些嘲弄的东西,请建议一些文档URL,其中将有所有这些 此外,在我的grails应用程序中,我将三个域关联为“hasMany和belongsTo”。因此,在为控制器编写单元测试时,请建议我究竟需要如何模拟这些域类 请

我正在使用Grails1.3.7

在为我的控制器编写单元测试时,由于我在控制器中的操作使用了动态查找程序,例如“findByName('ABC')”,我得到了错误。 我知道我也需要模仿动态查找器,我也尝试过,但不幸的是没有成功。 我请求你帮我完成我需要使用的模拟片段。 此外,对于所有这些嘲弄的东西,请建议一些文档URL,其中将有所有这些

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

请大家尽快回答我的疑问。 提前感谢,, 等待积极的回答


感谢您模拟域动态查找器尝试:

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

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

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

如果
name
是域的一个属性,那么当您选择时,动态查找程序将“自动”被模拟。您只需能够做到:

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

YourDomain instance = new YourDomain(name: 'foo')
mockDomain(YourDomain, [instance])
然后你可以做:

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

如果
name
是域的一个属性,那么当您选择时,动态查找程序将“自动”被模拟。您只需能够做到:

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

YourDomain instance = new YourDomain(name: 'foo')
mockDomain(YourDomain, [instance])
然后你可以做:

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

有人用Grails4.0.0和Spock更新了这个问题吗?因为它似乎没有工作的动态查找程序。

有人用Grails4.0.0和Spock更新了这个问题吗?因为它似乎没有工作的动态查找器