【问题标题】:After upgrade to Grails 2.4.3 from 2.2.4, metaclass changes are not reset between tests during unit testing从 2.2.4 升级到 Grails 2.4.3 后,元类更改不会在单元测试期间在测试之间重置
【发布时间】:2014-08-06 16:44:07
【问题描述】:

我们正在尝试从 Grails 2.2.4 升级到 2.4.3。在 Grails 2.2.4 中,如果我将 GrailsUnitTestMixin 包含在我的单元测试中,元类更改会在测试之间重置。在 2.4.3 中,这种行为似乎不再起作用,并且我的测试失败了。在查看 GrailsUnitTestMixin 的最新代码时,我不再看到对 MetaClassRegistryCleaner 的引用。

自 2.2.4 以来,这种行为是否发生了变化?确保单元测试期间元类更改在测试后被丢弃的适当方法是什么?

我知道 Spock @ConfineMetaclassChanges 注释用于限制特定更改的范围,但 2.2.4 中的先前行为更方便。

【问题讨论】:

    标签: unit-testing grails spock


    【解决方案1】:

    Grails 2.4.x 中的单元测试支持已被重构。 "What new in Grails 2.4" 指南中对此有一些说明。文档位于unit testing guide

    默认情况下,在每个测试类之后进行元类清理。 源代码在 https://github.com/grails/grails-core/blob/master/grails-plugin-testing/src/main/groovy/grails/test/runtime/MetaClassCleanerTestPlugin.groovy

    在 Grails 2.4.3 中,修复了影响 Grails 工件的元类清理的问题。以前这是在执行每个测试方法后完成的: https://github.com/grails/grails-core/commit/1885351d2be8f74076f2c83edcbc048c5bcfd9d7

    由于 Grails 默认缓存“测试运行时”实例以在单个测试类中执行所有测试,因此默认情况下,元类更改不会在每个测试方法之后被清除。

    如果您想在测试类中的每个测试方法之后清除元类更改,您可以使用FreshRuntime 注释对测试方法进行注释。应该支持将此注释添加到类级别,但该功能目前在 Grails 2.4.3 中被破坏,the bug 将在 Grails 2.4.4 中修复。此提交修复了此问题: https://github.com/grails/grails-core/commit/27ceeb086baeb879c490f29f6d799cbd532c0772

    综上,目前的解决方案是在每个测试方法中添加FreshRuntime注解。在 Grails 2.4.4 中修复了GRAILS-11626 之后,您就可以在类级别使用注解了。

    【讨论】:

      猜你喜欢
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 2020-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多