2012-03-22 12 views
4

私のテストの出力はcom.example.book.Book : nullです。テストをデバッグするとbオブジェクトがnameとして"MyBook"で作成されます。しかし、スタティックマッピングbelongsToがあるため、テストは失敗します。どのように私はこの仕事をするのですか? Books.groovyのbelongsToマッピングにコメントすると、テストに合格します。では、マッピングを使用してDomainクラスをテストするにはどうすればよいですか。 Libraryオブジェクトをインスタンス化し、Bookオブジェクトを追加する必要がありますか?しかし、単体テストであるため、ドメインクラスを単独でテストするのではありませんか?リレーショナルマッピングを持つgrailsドメインクラスの単体テスト方法は?

以下は私のコードです。

ドメイン:

//Book.groovy 
package com.example.book 

class Book { 
    static constraint = { 
     name blank: false, size: 2..255, unique: true 
    } 
    static belongsTo = [lib: Library] 
    String name 
} 

//Library.groovy 
package com.example.library 

class Library { 
    static hasMany = [book: Book, branch: user: User] 
    static constraints = { 
     name blank: false 
     place blank: false 
    } 
    String name 
    String place 
} 

ユニットテスト:

//BookUnitTests.groovy 
package com.example.book 

import grails.test.* 

class BookUnitTests extends GrailsUnitTestCase { 
    protected void setUp() { 
     super.setUp() 
     mockForConstraintsTests(Book) 
    } 

    protected void tearDown() { 
     super.tearDown() 
    } 

    void testPass() { 
     def b = new Book(name: "MyBook") 
     assert b.validate() 
    } 
} 

テスト出力:

Failure: testPass(com.example.book.BookUnitTests) 
| Assertion failed: 

assert b.validate() 
     | | 
     | false 
     com.example.book.Book : null 

     at com.example.book.BookUnitTests.testPass(BookUnitTests.groovy:17) 

感謝。

答えて

2

はい、あなたはライブラリを持たない本は存在できません。図書館を作成し、その図書を図書館に割り当てる必要があります。

belongsToを使用するかどうかは、要件によって異なります。ライブラリを保存して、結果としてすべての書籍を保存する必要がありますか?

+0

ドメインクラスを変更することはできません。答えをありがとう。私は正しい方向に考えさせました。 Bookオブジェクトの初期化中に 'Library'オブジェクトを作成し、' Book'オブジェクトに割り当てる必要があります: 'def l = new Library(name:" a "、place:" p "); def b = new Book(名前: "myBook"、lib:l); '次に、テストに合格する' b.validate() 'を実行します。ピー!!一日中それを考え出した。グレイルたちはそれを文書化していた可能性があります。 – boring

+0

Bookの単体テストはすべてLibraryUnitTestsに入れるべきですか、それとも2つのテストクラスの間に広めるべきですか? – Alison

+0

@Allison:現在取り組んでいる設計との統合テスト用です。非パーシスタンス関連の単体テストでは、意味を成し遂げることができます。 –

関連する問題