私のテストの出力は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)
感謝。
ドメインクラスを変更することはできません。答えをありがとう。私は正しい方向に考えさせました。 Bookオブジェクトの初期化中に 'Library'オブジェクトを作成し、' Book'オブジェクトに割り当てる必要があります: 'def l = new Library(name:" a "、place:" p "); def b = new Book(名前: "myBook"、lib:l); '次に、テストに合格する' b.validate() 'を実行します。ピー!!一日中それを考え出した。グレイルたちはそれを文書化していた可能性があります。 – boring
Bookの単体テストはすべてLibraryUnitTestsに入れるべきですか、それとも2つのテストクラスの間に広めるべきですか? – Alison
@Allison:現在取り組んでいる設計との統合テスト用です。非パーシスタンス関連の単体テストでは、意味を成し遂げることができます。 –