如何对具有关系映射的grails域类进行单元测试?

时间:2012-03-22 13:51:52

标签: unit-testing grails grails-domain-class domain-mapping

我的测试结果为com.example.book.Book : null。调试测试时,b对象的创建时"MyBook"name。但由于它具有静态映射belongsTo,因此测试失败。我该如何做这项工作。当我在Books.groovy中评论belongsTo映射时,测试通过了。那么如何使用映射测试Domain类。我应该实例化Library对象并向其添加Book对象吗?但是,这并不能单独测试域类,因为它应该在单元测试中,是吗?

以下是我的代码。

域:

//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)

感谢。

1 个答案:

答案 0 :(得分:2)

是的,如果没有图书馆,您设置图书的方式就不可能存在。您必须创建一个库并将书分配给它。

使用belongsTo是否有意义取决于您的要求。你真的需要保存图书馆并将所有图书保存下来吗?