unit-testing - 如何在Grails单元测试中获取抽象域类的实例?

标签 unit-testing grails mocking gorm

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

abstract class Dog {
...
}

class Collie extends Dog {
...
}

现在,我想对一个传递了Dog ID的 Controller 进行单元测试,如下所示:
//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)实例)。

有什么提示吗?

最佳答案

因此,我想到的一个可行的解决方案是使用元编程:

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

这不是最明显的方法,在单元测试中实际使用多个子类的情况下,它可能会变得复杂,因此,如果有人知道如何正确执行此操作,请做出贡献。

关于unit-testing - 如何在Grails单元测试中获取抽象域类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909990/

相关文章:

php - PHP 和 SQL 中的单元测试

grails - Grails Spring Security必填字段

grails 用空字符串替换 null 值的干净方法

angular - 如何在 Angular 分量测试中模拟 @INPUT 值

python - 你如何模拟一个 python 类并为每个实例化获取一个新的 Mock 对象?

c# - 模拟静态方法

android - 同时测试多个构建变体

unit-testing - Grails在模拟对象上测试关闭

java - junit 测试用例生成器

grails - Grails 3.3.8:无法解析ControllerUnitTest