ときどき、「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のドキュメントで見つけたのは、「テストでは、テストの代わりにテストの接尾辞を使用することもできます」ということだけです。