8

ドメインで割り当てられた ID を使用しています

class Book {

Integer id
String name

static mapping = {
    id generator: 'assigned'
    }   
}

新しい本を追加するには:

def book = new Book([name: "The Adventures of Huckleberry Finn"])
book.id = 123
book.save(flush: true)

すべてが完全に機能します。問題は単体テストにあります

まず、1 つのドメイン クラスしかモックできません。次に、単体テストで .save() を使用できないため、(私の知る限り)次のように mockDomain を使用するしかありません。

mockDomain(Book, [ [id: 123, name: "The Adventures of Huckleberry Finn"] ])

しかし、それは機能していません。「id generator: 'assigned'」のない通常のドメインで機能します。

何か案は?統合テストではこの問題に直面しないと読みました。これは単体テストの問題です。ありがとう

4

2 に答える 2

10

単体テストでドメイン オブジェクトを作成するためのマップ パラメータとして使用する場合 (デフォルトでは ではない) のbindable制約が必要です。ドメインクラスはididbindable

static constraints = {
    id bindable: true
}

アドバイス:
Grails > 2.x を使用している場合は、@Mockの代わりにドメイン クラスをモックするために使用してmockDomainください。単体テストの詳細については、Grails のドキュメントを参照してください。

別の Level Upプラグインを
使用して、ドメイン オブジェクトをモックします。build-test-data

于 2013-05-14T00:06:19.033 に答える
2

このソリューションは私のニーズに合っています:

Book mockBook = [name: "The Adventures of Huckleberry Finn"] as Book
mockBook.metaClass.id = 123
assert mockBook.id == 123
于 2014-04-25T18:16:20.220 に答える