【问题标题】:Grails Unit Test Buggy Dynamic FinderGrails 单元测试 Buggy 动态查找器
【发布时间】:2012-05-04 16:05:22
【问题描述】:

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

【问题讨论】:

标签: unit-testing grails groovy


【解决方案1】:

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

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

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

【讨论】:

  • 我忘记在元类和方法名称之间添加 .static。 JIRA 中指出的问题是在 1.3.7 中调用 MockDomain 时未正确生成 ...NotInList 的动态查找器。需要元分类来解决这个问题。
猜你喜欢
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多