unit-testing - Grails 单元测试无法识别域类上的 .save()

标签 unit-testing testing grails junit

我正在努力成为一名优秀的小程序员,并为我的 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/

相关文章:

grails - 在IntelliJ IDEA中哪里可以编辑grails启动命令行?

ios - ios应用程序 "knows"如何运行单元测试

testing - 我们可以使用 UFT 12.0 自动测试 .apk(Android) 应用程序吗

java - 创建和引用 stub 对象进行测试,而不需要 stub 将扩展的类

c# - Telerik WebAii Framework - 如何将焦点更改为新打开的页面/窗口

Django如何测试消息是否发送

ajax - Grails spring 安全核心插件 : how to remove the browser prompt for an ajax request

grails - 在Grails中使用域实例查找子域

scala - 如何使用junit的EqualsWithDelta

java - 如何在服务层测试Add方法?