2009-07-30 19 views
0

これはドメインクラスである:Grailsのドメイン単体テスト - mockFor()

class Registration { 

    String email 
    String generatedKey 

    def beforeInsert = { 
     String newToken = GlobalHelper.getRandomString() 
     generatedKey = newToken 
    } 
} 

と、これはユニットテストの関連する部分である:

def c = mockFor(GlobalHelper) 
    c.demand.static.getRandomString {-> return "nestoABC" } 
    c.createMock() 
    reg.beforeInsert() 

テストを実行しているとき、私はこれを取得エラー:


そのようなプロパティ:クラスのGlobalHelper:RegistrationTests

groovy.lang.MissingPropertyException:そのようなプロパティ:クラスのGlobalHelper:RegistrationTests.testConstraintsでRegistrationTests (RegistrationTests.groovy:57)


GlobalHelperクラスはグルービーソースフォルダに位置しており、記載されています57行目はmockFor()メソッドの行です。

Grailsのテストのドキュメントは、この問題に関して非常に有用ではなかった

...

私はこれを知っている簡単に統合テストを使って解決し、私はそれはまた、このように動作するはずだと思うことでしょう。事前

+0

になるのでしょうか? –

答えて

0

おかげでthis文書によると、静的メソッドをあざけることは、現在動作しません。

+0

残念ながら、私はこれが問題ではないと思います。 def c = mockFor(GlobalHelper) 静的メソッドはまだコードのこの部分では言及されていません... –

0

どのGrailsを使用していますか?

Grails 1.1.1を使用すると、上記のドメインRegistrationで次のテストが動作します。これは、Grails 1.1+およびGrails 1.0.xでテストプラグインを実行する必要があります。

ユニットテストがGrailsUnitTestCaseに拡張されていることを確認してください。私はその間違いを何度も繰り返した。

import grails.test.* 

class RegistrationTests extends GrailsUnitTestCase { 

    void testBeforeInsert() { 
     def reg = new Registration() 
     reg.generatedKey = "preBeforeInsert" 
     String randomString = "nestoABC" 

     def c = mockFor(GlobalHelper) 
     c.demand.static.getRandomString {-> return randomString } 

     assertNotSame(reg.generatedKey, randomString) 
     reg.beforeInsert() 
     assertSame(reg.generatedKey, randomString) 

     c.verify() //Verify the demands 
    } 
} 
+0

私はGrails 1.1を使用していますので、これは問題の可能性があります。 GrailsUnitTestCaseは拡張されていますが、何かが壊れています。 Grails 1.1.1は現在オプションではありませんので、私はこれを行い、動作しています: GlobalHelper.metaClass.static.getRandomString = { - "return" nestoABC "} –

+0

メソッドをmetaClassに追加するときは注意が必要です。あなたはそれをきれいにするか、他のテストで問題が発生するかもしれません。 テストスイート内でテストを実行しても問題ありませんか? –

0

私はこの問題を抱えていたし、完全に嘲笑されるクラスのクラス名を修飾することによってそれを解決しました。だからあなたの例:

def c = mockFor(GlobalHelper) 

あなたはGlobalHelperクラスをインポートしてください

def c = mockFor(com.example.fully.qualified.GlobalHelper) 
関連する問題