我正在努力成为一名优秀的小程序员,并为我的 Grails 2.2.3 应用程序设置单元测试。使用 GORM 注入(inject)的 .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 实例。第一个断言为 false,Term.count()
返回 0。
有人知道这是为什么吗?我有一个模拟的 Term 和 TermService(我相信通过 TestFor 注释),所以我不太确定为什么这行不通。谢谢!
编辑:这是我的学期类(class)。
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()
}
}
最佳答案
看起来 id
生成器已被分配
,因为您提到过使用遗留数据库。另外,id
在域类中默认是不可绑定(bind)的(map 结构不适用于 id)。所以,我认为你最终必须像下面这样使用:
def t = new Term(code: "201310")
t.id = 1
t.save(...)
关于unit-testing - Grails 单元测试无法识别域类上的 .save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18058401/