我正在努力成为一名优秀的小程序员并为我的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()
}
}
答案 0 :(得分:8)
由于您提到过使用旧数据库,因此id
生成器看起来像assigned
。在域类中,默认情况下,id
不可绑定(地图构造不会为id工作)。所以,我认为你最终必须使用如下:
def t = new Term(code: "201310")
t.id = 1
t.save(...)