2
我有像这样一堆子类:在Grails中,我如何在单元测试中模拟GrailsDomainBinder?
abstract class Fruit {
...
String getType() {
// get the discriminator value for this type
GrailsDomainBinder.getMapping(this.class).discriminator
}
}
class Apple extends Fruit {
static mapping = {
discriminator 'Apple'
}
}
class Pear extends Fruit {
static mapping = {
discriminator 'Pear'
}
}
换句话说,Fruit
是碱型与Apple
和Pear
作为亚型。我公开了一个type
属性,该属性获取在子类中设置的鉴别器值。
现在我有一个JsonExportService
将实例导出为JSON数据。当我运行应用程序时,此服务正确导出填充了鉴别器值的type
属性。
我现在需要编写一个单元测试JsonExportService
。问题是,GrailsDomainBinder
似乎没有在单元测试中被嘲笑,而且我得到了NPE:无法访问空对象上的discriminator
属性。
我可以解决它在两个方面:
创建具有相同的值作为鉴别每个子类的静态属性:
class Pear extends Fruit { static String type = 'Pear' ... }
这似乎真的哈克不过,和我在两个地方宣布了相同的价值。
更改
getType()
代码:GrailsDomainBinder.getMapping(this.class)?.discriminator
这工作,但现在我基本上忽略了鉴别完全和单元测试是不是“完整的”,因为它需要后续集成测试以确保
getType()
方法返回正确的值。
有谁知道从域映射得到鉴别价值的更好,单元测试友好的方式?