4

有时我会遇到一个问题,即名称以“IntegrationTests”结尾的 Grails 集成测试不起作用,并出现异常,表明 GORM 方法尚未添加到域类中。将这些测试重命名为“*IntegrationTest”(最后没有 s)后,它们工作正常。

一个简短的例子:

class MyIntegrationTests {
    @Test
    void myTest() {
        assert MyDomainClass.count() == 0
    }
}

将失败并出现以下异常:

Failure:  myTest(de.myproject.MyIntegrationTests)
  groovy.lang.MissingMethodException: No signature of method: de.myproject.MyDomainClass.count() is applicable for argument types: () values: []
Possible solutions: count(), ident(), print(java.io.PrintWriter), print(java.lang.Object), getCount(), wait()
at de.myproject.MyIntegrationTests.myTest(MyIntegrationTests.groovy:9)

将 MyIntegrationTests 重命名为 MyIntegrationTest 后,测试通过。

根据测试的名称,是否发生了某种魔术?我在 Grails 文档中找到的只是:“测试也可以使用 Test 的后缀而不是 Tests。”有什么想法吗?

4

3 回答 3

3

我最终自己找到了“*Test”和“*Tests”行为不同的原因:不同的后缀改变了测试运行的顺序。更糟糕的是,确切的顺序取决于平台。因此,我的测试在本地 (OSX) 以不同于我的 CI 机器 (Linux) 的顺序运行,从而产生了不同的结果。

但是,为什么以某种顺序发生异常是一个完全不同的问题,我(还)还没有弄清楚。

于 2012-07-05T06:38:25.850 回答
0

只要文件在integration文件夹中,这应该可以正常工作。你确定你没有在unit测试文件夹中,然后将它移动到integration重命名的文件夹中吗?或者您可能正在使用 intellij 并且您进行了“junit”测试而不是“grails”?

您遇到的错误似乎暗示 grails 在运行测试时没有启动。

于 2012-04-26T14:59:27.520 回答
0

如果没有后缀,您的测试将不会执行Tests

复制自 Grails 文档主页 (http://grails.org/doc/latest/guide/testing.html):

默认的类名后缀是 Tests,但从 Grails 1.2.2 开始,也支持后缀 Test。

j-

于 2012-04-30T08:40:24.643 回答