2011-10-25 9 views
0

ユニットテストで2つのmockDomainを使用しています。私が1つのUT(grails test-app -unit MyTestを使用)を起動すると、テストは成功しますが、テストスイート全体(grails test-app -unit)を起動すると、mockDomainを2つ定義したテストに失敗します。grails mockDomain()テストとすべてのテストスイートで実行すると異なる動作

一度に1回、またはスイート全体を起動したときにテストを実行する方法に違いはありますか?

私のコードサンプル:

void testSaveTranslation_ok() { 

    mockDomain(Translation) 
    mockDomain(HelpSubject, [new HelpSubject(name_fr: "subject")]) 

    assertEquals(1, HelpSubject.count()) 
    HelpSubject helpSubject = HelpSubject.findAll().get(0) 
    assertNull(helpSubject.name) 

    def translation = new Translation(defaultVal:"defaultVal", enVal: "enVal", frVal: "frVal", meta: "helpSubject#name#${helpSubject.id}") 
    assertEquals(0, Translation.count()) 

    translationService.saveTranslation(translation) 
    assertEquals(1, Translation.count()) 

    assertNotNull(helpSubject.name) 
} 

よろしく、

デビッド。

答えて

0

私は翻訳とHelpSubjectをモックする方法の違いを参照してください。

この使用してみてください:私は(私が間違っている場合は、私を修正してください)それを行う場合には、私の翻訳インスタンスが保存されます([翻訳]翻訳)

+0

mockDomainをそれほどのassertEquals(0、Translation.count( ))は失敗します。このテストの関心事は、メソッドtranslationService.saveTranslation(翻訳)が翻訳を効果的に保存することを検証することです。 – David

+0

あなたは正しいと思いますが、それはあなたがとにかく欲しいものです。 Grailsでは、実際にはDomainオブジェクトに対してsave()メソッドを呼び出す必要はありません。あなたのオブジェクトがセッションにアタッチされていて、トランザクションに参加していて、それが汚い(または新しい)場合、save()を呼び出してもいなくても、オブジェクトは保持されます。今の場合、気にしないで、saveTranslation()が何であれテストしたいだけです。 mockDomainは範囲が限られており、静的メソッドなどはすべて持たないことに注意してください。必要に応じてメタプログラムを実装する必要があります。 – dbrin

関連する問題