Grails单元测试不识别域类上的.save()

时间:2013-08-05 12:39:33

标签: unit-testing testing grails junit

我正在努力成为一名优秀的小程序员并为我的Grails 2.2.3应用程序设置单元测试。使用GORM注入的.save()方法的单元测试显然不会持久存在模拟测试数据库中。例如,以下是一个测试包含的内容:

@TestFor(TermService)
@Mock(Term)
class TermServiceTests {
    void testTermCount() {
        def t = new Term(code: "201310").save(validate: false, flush: true, failOnError: true)
        println "Printing Term: " + t.toString()

        assert 1 == Term.count() // FAILS
        assert service.isMainTerm(t) // FAILS
    }
}

我做了println,最终打印Printing Term: null,这意味着Term没有保存并返回Term实例。第一个断言是假的,Term.count()返回0。

有谁知道为什么会这样?我有一个模拟Term和TermService(我相信通过TestFor注释),所以我不太清楚为什么这不起作用。谢谢!

编辑:这是我的Term课程。

class Term {

    Integer id
    String code
    String description
    Date startDate
    Date endDate

    static mapping = {
        // Legacy database mapping
    }

    static constraints = {
        id blank: false
        code maxSize: 6
        description maxSize: 30
        startDate()
        endDate()
    }
}

1 个答案:

答案 0 :(得分:8)

由于您提到过使用旧数据库,因此id生成器看起来像assigned。在域类中,默认情况下,id不可绑定(地图构造不会为id工作)。所以,我认为你最终必须使用如下:

def t = new Term(code: "201310")
t.id = 1
t.save(...)