【发布时间】:2013-08-06 04:10:53
【问题描述】:
我正在努力成为一名优秀的小程序员,并为我的 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 实例。第一个断言为 false,Term.count() 返回 0。
有人知道为什么会这样吗?我有一个模拟 Term 和 TermService (我相信通过 TestFor 注释),所以我不太确定为什么这不起作用。谢谢!
编辑:这是我的学期课程。
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()
}
}
【问题讨论】:
-
设置
validate:true看看你是否缺少任何约束 -
Term长什么样子? -
@Alidad 我肯定缺少一些约束,但我认为设置
validate: false意味着保存时不会触发验证,因此我不必填写所有字段。 @dmahapatro 我在原始帖子中添加了术语。 -
为什么是
Integer id? GORM 默认为Long id,不需要明确指定。 -
id生成器是否已分配?您可以在测试中尝试t.id = 1然后t.save(...),而不将id设置为映射结构。
标签: unit-testing testing grails junit