我不时会遇到Grails集成测试结束的问题,在“IntegrationTests”中结束的名称不能用于显示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的后缀而不是测试。”任何想法?
答案 0 :(得分:3)
我最终找到了自己“* Test”和“* Tests”的不同行为的原因:不同的postfix会改变测试运行的顺序。更糟糕的是,确切的顺序取决于平台。因此,我的测试以不同于CI机器(Linux)的顺序在本地(OSX)运行,从而产生不同的结果。
为什么以某种顺序发生异常是一个完全不同的问题,但是我还没有想到(但是)。
答案 1 :(得分:0)
只要文件位于integration
文件夹中,这应该与您原来的方式有关。您确定在unit
测试文件夹中没有它,然后将其移到重命名的integration
文件夹中吗?或者你可能正在使用intellij并且你进行了“junit”测试而不是“grails”测试?
您获得的错误似乎意味着在运行测试时grails没有启动。
答案 2 :(得分:0)
如果测试没有后缀Tests
,则不会执行测试。
从Grails文档主页复制(http://grails.org/doc/latest/guide/testing.html):
默认的类名后缀是Tests,但是从Grails 1.2.2开始 也支持Test的后缀。
的J -