2013-05-13 11 views
8

ich in meiner DomainGrails, Unit-Test-Mock-Domäne mit zugeordneten ID

zugewiesen id bin mit
class Book { 

Integer id 
String name 

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

so ein neues Buch hinzuzufügen:

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

alles perfekt funktioniert, ist das Problem in meinem Unit-Tests

zunächst alles, was ich nur 1 Domain Klasse verspotten, zweitens, ich .save nicht verwenden kann() auf Unit-Test, so meine einzige Option (soweit ich weiß) ist mockDomain wie folgt zu verwenden:

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

aber es funktioniert nicht, es in einer normalen Domain ohne funktionieren würde "id Generator: 'zugewiesen'"

irgendwelche Ideen? las ich, dass ich dieses Problem nicht in integriertem Test Gesicht, ist es nur ein Problem in Unit-Test dank

Antwort

8

Sie würden die bindable Einschränkung für id benötigen, wenn Sie verwenden möchten (standardmäßig id nicht bindable) es als map params, um das Domänenobjekt im Komponententest zu erstellen. Die Domain-Klasse würde

static constraints = { 
    id bindable: true 
} 

Worte der Beratung:
Wenn Sie Grails> 2.x verwenden, verwenden @Mock zu mock-Domain-Klassen statt mockDomain. Sie können Details über Unit Testing in Grails-Dokumenten finden.

Another Level Up
Verwenden build-test-data Plugin Mock Domänenobjekte.

+0

Danke, das bindable versuchen: true, für @Mock, wie ich, dass ich nur 1 Domain in einer Testdatei Mock erwähnt, so dass, wenn es nötig ist verspotten mehr als 1, i mockDomain verwenden müssen, es sei denn es andere Wege gibt mehr als eine Domäne zu verspotten, die ich nicht – iMiX

+4

'@Mock ([Domäne1, Domain2, Domain3, .....]) wissen' – dmahapatro

2

Diese Lösung passt meine Bedürfnisse:

Book mockBook = [name: "The Adventures of Huckleberry Finn"] as Book 
mockBook.metaClass.id = 123 
assert mockBook.id == 123 
Verwandte Themen