我有一堆像这样的子类:
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: cannot access discriminator
property on a null object。
我可以通过两种方式解决它:
在每个子类中创建一个与鉴别器具有相同值的静态属性:
class Pear extends Fruit { static String type = 'Pear' ... }
不过,这似乎真的很老套,我在两个地方声明了相同的值。
getType()
将代码更改为:GrailsDomainBinder.getMapping(this.class)?.discriminator
这可行,但现在我基本上完全忽略了鉴别器,并且单元测试并不“完整”,因为它需要后续集成测试以确保该
getType()
方法返回正确的值。
有谁知道从域映射中获取鉴别器值的更好的、单元测试友好的方法?