Grails Unit Test Buggy动态查找器

时间:2012-05-04 16:05:22

标签: unit-testing grails groovy

我正在为服务类编写单元测试。此服务类调用MyDomain.findAllByIdNotInList。我面临的问题是,Grails不会将NotInList识别为模拟域的动态查找器。我尝试了Metaclass-ing这个功能,但是遇到了问题。

是否有任何创造性的方法可以绕过将单元测试转变为集成测试的缺点?我想避免这种情况有多种原因(运行时间,只有我们的单元测试在构建时运行等)

此外,我的元课程写得很糟糕:

MyDomain.metaClass.findAllByIdNotInList = {ArrayList list ->
        return []
    }

编辑:使用grails 1.3.7。

也尝试了

 MyDomain.metaClass.findAllByIdNotInList = {deflist ->
        return []
    }

此处有错误报告:

http://jira.grails.org/browse/GRAILS-8593

1 个答案:

答案 0 :(得分:2)

@Sagar V的评论是正确的,当域被正确模拟时,你应该能够利用所有动态查找器。如果您在2.0之前使用的是Grails版本,那么在尝试调用动态查找程序之前,您必须扩展GrailsUnitTestCase并调用MockDomain(MyDomain)。作为一个FYI你的metaClassing没有正确编写(在我看来你应该使用模拟框架让你的测试工作我提供正确的语法,以便你将来可以正确使用它。)

MyDomain.metaClass.'static'.findAllByIdNotInList = {defList ->
    []
}

当您覆盖的方法为static时,您需要在.'static'.和方法名称之间添加metaClass