【问题标题】:How to fetch instances of an abstract domain class in Grails unit tests?如何在 Grails 单元测试中获取抽象域类的实例?
【发布时间】:2012-01-18 12:18:31
【问题描述】:

我有一个具有顶级抽象类的域对象层次结构。在 GORM 中,它们可以这样定义:

abstract class Dog {
...
}

class Collie extends Dog {
...
}

现在我想对通过 Dog ID 的控制器进行单元测试,如下所示:

//in the unit test
new Collie(id:1).save(validate:false)
params.id = 1
controller.show()

//in the tested controller
def dog = Dog.get(params.id)

这适用于真正的 GORM,不幸的是,测试 GORM 实现没有返回任何内容,因为我不能使用 @Mock(Dog)mockDomain(Dog)(这样做会返回异常,因为 Dog 是抽象的)并且 @Mock(Collie) 是不够的(即使实际的模拟对象实际上是一个 Collie 实例)。

有什么提示吗?

【问题讨论】:

    标签: unit-testing grails mocking grails-orm


    【解决方案1】:

    所以我想出的一个可行的解决方案是使用元编程:

    Dog.metaClass.static.get = { Long id ->
        return Collie.get(id)
    }
    

    这不是最明显的方法,如果您在单元测试中实际使用多个子类,它可能会变得复杂,所以如果有人知道如何正确地做到这一点,请贡献。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      相关资源
      最近更新 更多