0

我正在为服务类编写单元测试。此服务类调用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

4

1 回答 1

2

@Sagar V 的评论是正确的,当正确模拟域时,您应该能够利用所有动态查找器。如果您使用的是 2.0 之前的 Grails 版本,则必须在尝试调用动态查找器之前进行扩展GrailsUnitTestCase和调用。MockDomain(MyDomain)作为仅供参考,您的 metaClassing 编写不正确(在我看来,您应该使用模拟框架来使您的测试正常工作,我提供了正确的语法,以便您将来可以正确使用它)。

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

当您覆盖的方法是static您需要添加.'static'.中间metaClass和方法名称时。

于 2012-05-04T17:54:36.523 回答