2011-08-05 13 views
4

私はいくつかの簡単な方法の単体テストを書いています。私が抱えている問題は、ドメインが嘲笑されるべきであるにもかかわらず、「保存」が私のドメインオブジェクトでは機能していないということです。ドメインオブジェクトに対してvalidateを呼び出すと、trueに戻ります。私はtry/catchでオブジェクトを囲んでいて、奇妙なエラーを投げていないことを確認しています。そうではありません。通話とテストのための以下のコード。Grails mockDomainは保存しないで保存する

void test() 
{ 
    mockDomain(MyDomain) 
    Map map1= ["asdf":" "] 
    Map map2 = ["asdf":123] 
    InputObject input = new InputObject() 
      input.setForeignId("1") //not a constraint 
    input.setMap1(map1) 
    input.setMap2(map2) 
    service.methodUnderTest(profile) 
    List list = MyDomain.getAll() 
    assertEquals 1, l.size() //FAILS 
} 

def persistPublishGuids(InputObject input) 
{ 
    try{ 
    HashMap map1 = input.map1 
    for (e in map1) 
    { 
     String key= e.getKey() 
     String value = e.value 
     long size = input.map2.get(key) 
     MyDomain domain = new MyDomain (id:guid, field1:value, field2:input.foreignId, field3:size) 
     domain.save() 
    } 
    } catch(ex) 
    { 
     ex.printStackTrace() 
    } 
} 
+3

それを参照してくださいテストですべてのフィールドのセットアップ基本データにしたくない場合にはfalseに検証フラグを設定する検討に値しますこれが[sscce](http://sscce.org/)の場合はおそらく役に立ちます。あなたが投稿したものは、単独では実行できません。問題を実行して再現し、それを投稿する最も簡単な例を作りましょう。そうすることで、問題の根本を明らかにすることができます。そうでない場合は、誰かが助けてくれるはるかに明確な例が得られます。 – ig0774

+0

私はそれを理解しました。 grailsをきれいにし、STSでプロジェクトをクリーン/再構築する必要があります。私は今朝別のテストを書き始めたときに、自分のドメインオブジェクトの1つにメソッド 'save()'がないと主張していたので、これを見つけました。グーグルでは、清潔で再構築されたソリューションにつながりました。 – Joseph

答えて

1

問題は、grailsアプリケーションをクリーンアップしてプロジェクトを再構築する必要があることでした。

+0

これはgrailsの疫病です...私は、コード化するものよりも、クリーニング/コンパイルにもっと多くの時間を費やしています... GrrrRails。 – Guillaume

+0

私はこの問題を抱えていません。セットアップに問題がある必要があります。 – Joseph

+0

私は一般的に言っていました: 'クリーン' grailsは、Windowsの再起動と同じです...ほぼすべての奇妙な動作を治します... – Guillaume

4

また、テストでドメインオブジェクトを保存するときに、flushおよびfailOnErrorフラグをtrueに設定することをお勧めします。 'flush:true'は、オブジェクトがすぐに保存されることを保証します。 failOnError検証エラーがなければ、オブジェクトは保存されず、簡単に見逃される可能性があります。

domainObject.save(flush:true, failOnError: true) 

あなたは

domainObject.save(validate: false)

Grails domain object save docs for full information