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

4

3 に答える 3

3

最終的に、「*Test」と「*Tests」の異なる動作の原因を自分で見つけました。異なる接尾辞は、テストが実行される順序を変更します。さらに悪いことに、正確な順序はプラットフォームに依存します。したがって、テストは CI マシン (Linux) とは異なる順序でローカル (OSX) で実行されたため、異なる結果が得られました。

ただし、例外が何らかの順序で発生する理由はまったく別の問題であり、私はまだ理解していません。

于 2012-07-05T06:38:25.850 に答える
0

integrationファイルがフォルダー内にある限り、これは元の方法で機能するはずです。unitテストフォルダーにそれを持っていなかったのでintegration、名前を変更してフォルダーに移動しましたか? それとも、intellij を使用していて、「grails」ではなく「junit」のテストを実行した可能性がありますか?

表示されるエラーは、テストの実行時に 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 に答える