【问题标题】:Grails Integration Test: Domain Classes Not FunctioningGrails 集成测试:域类不起作用
【发布时间】:2025-11-09 08:15:01
【问题描述】:

我在 STS 中创建了简单的 Grails 插件项目。我正在使用 Spring Security Core 插件,它添加了一些域类。我创建了一个集成测试,它只是创建一个域类(用户)的实例,并保存它。运行集成测试时出现以下错误:

Failure:  testSomething(com.resonance.rwp.core.tests.UserServiceTests)
groovy.lang.MissingMethodException: No signature of method: com.resonance.rwp.core.domain.User.save() is applicable for argument types: () values: []
Possible solutions: save(), save(boolean), save(java.util.Map), wait(), any(), wait(long)
    at com.resonance.rwp.core.tests.UserServiceTests.setUp(UserServiceTests.groovy:14)

我不明白,似乎域类由于某种原因没有通过 GORM 映射。我遇到的所有事情都涉及尝试在单元测试中使用 GORM 的人,但我肯定在运行集成测试。非常感谢任何帮助。

这里是源码,很简单:

class UserServiceTests {

@Before
void setUp() {
    User user = new User(username: "Test");
    user.save();
}

@After
void tearDown() {
    // Tear down logic here
}

@Test
void testSomething() {
    fail "Implement me"
}
}

我还尝试将所有内容移至测试本身。显然 setUp 方法失败了。

【问题讨论】:

  • 显示测试类的代码。
  • 看起来 Gorm AST 转换由于某种原因没有运行。除了测试类,还能指定STS、Grails、Groovy-Eclipse的版本吗?这可能最终成为 STS 中的一个错误,如果是这样,最好的办法是在问题跟踪器中提出问题:issuetracker.springsource.com/browse/STS
  • 我已经添加了来源,谢谢帮助!
  • 测试是否通过命令行运行?在 1.3.7 中工作。
  • 是的,我通过在 grails 命令提示符下执行 test-app 在 STS 中运行它。我可能应该尝试在 STS 之外运行 grails test-app 看看会发生什么。

标签: grails grails-orm sts-springsourcetoolsuite


【解决方案1】:

我在一个新生成的插件上也遇到了这个问题,发现问题是新生成的插件不依赖于hibernate。我在 BuildConfig.groovy 中添加了以下内容:

plugins {
    runtime ":hibernate:$grailsVersion"
}

这导致问题消失。我对 Grails 还不够熟悉,所以没有任何理论来解释为什么错误消息暗示了像 save 这样的持久性方法的实际存在,但至少我让它工作了 :)

http://jira.grails.org/browse/GRAILS-9163?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

【讨论】:

    【解决方案2】:

    刚刚遇到像您这样的问题,使用 Grails 2.0.0 创建一些集成测试

    grails test-app 运行时集成测试失败,但以grails test-app --integration 运行时确实工作。令我惊讶的是,单元测试以某种方式污染了测试环境。更令人惊讶的是,删除一些自动生成的(即空的)单元测试就成功了!现在两个命令都通过了测试。

    another question 中已经讨论过这个话题,提问者需要将他的单元测试迁移到 Grails 2.0.0 方式 编写测试(即 JUnit 4 和 grails 的测试 mixins ) 让他的集成测试工作,你可以在the docs 中看到如何做到这一点。

    如果我可以在为此目的构建的最小应用程序中重现,我将尝试提交错误报告。希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      在这种情况下,出于某种原因,Grails AST 转换似乎没有运行。我猜你正在运行 Grails 2.0,但你实际上并没有说。尝试在 STS 中运行一个干净的构建(项目 -> 清洁...)。

      我在一个简单的 Grails 2.0 项目中对此进行了尝试。看起来它对我有用。我认为您最好的选择是创建一个有此问题的简单 grails 项目,将其导出为 zip 并引发 jira 问题。 https://issuetracker.springsource.com/browse/STS

      【讨论】:

      • 它是 Grails 2.0。也忘了提到它是一个插件项目。不确定这是否会有所作为。这是一个全新的项目,我确实尝试过干净。
      • 提出一个错误并附加项目。
      【解决方案4】:

      如果您有一个仍在使用的测试:

      extends GrailsUnitTestCase 
      

      你会看到这个。您需要在 grails 2+ 中将所有单元测试更改为基于注释的测试

      http://grails.org/doc/latest/guide/testing.html#unitTesting

      【讨论】: