Unit testing 如何在Grails2.2.4单元测试中使用标准进行模拟?

Unit testing 如何在Grails2.2.4单元测试中使用标准进行模拟?,unit-testing,grails,groovy,gorm,Unit Testing,Grails,Groovy,Gorm,下面给出的语句在Grails1.3.7中运行良好,但在2.2.4中失败。 模拟不会被调用 YourDomainClass.metaClass.static.findFooBar = { -> [a,b,c]} 给出了这个例外 | groovy.lang.MissingMethodException: No signature of method: YourDomainClass.withCriteria() is applicable for argument typ

下面给出的语句在Grails1.3.7中运行良好,但在2.2.4中失败。 模拟不会被调用

YourDomainClass.metaClass.static.findFooBar = { -> [a,b,c]}
给出了这个例外

|  groovy.lang.MissingMethodException: No signature of method: 
        YourDomainClass.withCriteria() is applicable for argument types: () values: []

有什么解决方案吗?

您是否已将单元测试切换到新的API?在Grails1.3中,您将在测试用例中使用…UnitTestCase超类,在Grails2.x中,单元测试机制发生了变化,现在您应该使用
@TestFor(YourDomainClass)
@Mock(YourDomainClass)
在您的测试用例类上,没有继承性

不确定这是否会解决问题,但我将YourDomainClass.metaClass.static.findFooBar={critera->[a,b,c]}更改为YourDomainClass.metaClass.static.findFooBar={CloseCLS->[a,b,c]}。。。。。。。。。。不知道原因是什么,但异常建议可能的解决方案:withCriteria(groovy.lang.Closure)、withCriteria(java.util.Map、groovy.lang.Closure)、createCriteria()