unit-testing - 从 2.2.4 升级到 Grails 2.4.3 后,在单元测试期间,元类更改不会在测试之间重置

标签 unit-testing grails spock

我们正在尝试从 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 中以前的行为要方便得多。

最佳答案

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-11626在 Grails 2.4.4 中已修复,然后您可以在类级别使用该注释。

关于unit-testing - 从 2.2.4 升级到 Grails 2.4.3 后,在单元测试期间,元类更改不会在测试之间重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25165744/

相关文章:

unit-testing - 我们可以在一个项目中同时运行 Spock 测试用例和 Junit 5 测试用例吗?

groovy - 使用Gradle运行Spock/Geb测试时出现MissingMethodException错误

php - 在 firefox 中使用 selenium 插件时,我们如何放置时间戳等动态输入?

visual-studio-2010 - 测试环境不复制我的文件

Grails - 在路径中使用变量的同时访问 Config.groovy 中的数据

Grails 2.4.4 更新用户在点击后端代码之前自动保存用户

java - Spock 如何为 Java 类模拟同一个类的方法

c# - 运行 Fixtures 但不是并行 NUnit 中的方法

c# - 单元测试 EntityFrameworkCore IEntityTypeConfiguration<T>

grails - Grails Web Flow:是否从另一个 Controller 操作重定向到Webflow?