【问题标题】:Why does inheriting from GroovyTestCase cause Spring errors in Grails 2.2?为什么从 GroovyTestCase 继承会导致 Grails 2.2 中出现 Spring 错误?
【发布时间】:2013-01-20 20:22:10
【问题描述】:

当我创建域类时 Grails 为我生成的集成测试类没有扩展类 GroovyTestCase。但是,我看到很多作者都推荐它(here 是一个示例,以便使用shouldFail 方法,这似乎确实有效)。

但是,当我在交互式 Grails 控制台中运行 test-app 时,从 GroovyTestCase 扩展我的测试类会导致以下错误消息:

Spring Loaded: Cannot reload new version of foo.barTests
Reason: Supertype changed from java/lang/Object to groovy/util/GroovyTestCase

这是我应该关心的事情吗?我在网上搜索过,找不到其他人抱怨这个错误,所以这可能是 Grails 2.2 的新内容。请指教。


我在 grails 交互式控制台中运行我的测试(当你运行 grails 时没有参数)。我已经让我的测试从 Object 继承了一段时间,但是当我运行 test-app 时,我仍然偶尔会将这些消息输出到 HTML 测试报告(“从 GroovyTestCase 更改为 Object”种类)。

【问题讨论】:

  • 你在grails clean 之前尝试过grails test-app 吗?它会产生同样的错误吗?
  • 有关信息,您的链接已过时(它是关于 grails 1.3.x)
  • 奇怪的是,当我撤消扩展时,grails 再次抱怨相反的情况 (changed from groovy/util/GroovyTestCase to java/lang/Object),即使我先执行 grails clean 也是如此。
  • 您是在 GGTS 内部还是在命令行上运行这些测试?如果是GGTS,那是什么版本?
  • 我正在使用 grails 交互式控制台。请查看更新后的问题。

标签: spring grails groovy integration-testing


【解决方案1】:

我很确定这是一个与 Grails 相关的错误

  1. AST 转换注释
  2. 弹簧加载模块

我也遇到过这种奇怪的行为。

导致这个问题的步骤似乎是一个 Groovy 类被编译一次而没有转换,所以它是java.lang.Object 的子类。

当 AST 转换启动它时,会再次重新编译该类。这一次,它成为另一个类的子类。然后 Spring-loaded 无法将它们重新加载到内存中(因为 JVM 不允许同一个类重新定义其超类)。

【讨论】:

  • 如果这确实是 Grails 中的一个错误,您认为它会在生产环境中产生负面影响吗? (恐怕我自己对弹簧加载的知识非常有限。)为了安全起见,我是否应该恢复到早期版本的 Grails?
  • @Stephan 别担心,它对生产来说是安全的。我已经在云中运行了一个 2.2 应用程序。弹簧加载仅适用于dev 环境。
  • 谢谢。我不知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2020-02-26
  • 2018-10-11
  • 1970-01-01
相关资源
最近更新 更多