gpt4 book ai didi

grails - 在Grails中,如何在单元测试中模拟GrailsDomainBinder?

转载 作者:行者123 更新时间:2023-12-02 14:12:46 24 4
gpt4 key购买 nike

我有很多这样的子类:

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是基本类型,其中 ApplePear是子类型。我公开了 type属性,该属性获取在子类中设置的鉴别值。

现在,我有一个 JsonExportService将实例导出为JSON数据。当我运行应用程序时,此服务正确导出用鉴别符值填充的 type属性。

现在,我需要为 JsonExportService编写单元测试。问题是,在单元测试中 GrailsDomainBinder似乎没有被 mock ,并且我得到了NPE:无法访问空对象上的 discriminator属性。

我可以通过两种方式解决它:
  • 在每个子类中创建一个与鉴别符具有相同值的静态属性:
    class Pear extends Fruit {
    static String type = 'Pear'
    ...
    }

    不过,这似乎确实很骇人,我在两个地方声明了相同的值。
  • getType()代码更改为:
    GrailsDomainBinder.getMapping(this.class)?.discriminator

    这可行,但是现在我基本上完全忽略了鉴别符,并且单元测试不是“完整的”,因为它需要进行后续的集成测试以确保getType()方法返回正确的值。

  • 有谁知道从域映射中获得鉴别值的更好的,便于单元测试的方法?

    最佳答案

    似乎DefaultGrailsDomainConfiguration是初始化映射的负责人,因此您可以尝试:

    def domainClass = grailsApplication.getDomainClass(Pear.class.name)
    DefaultGrailsDomainConfiguration.configureDomainBinder(grailsApplication, [domainClass] as Set)
    println GrailsDomainBinder.getMapping(Pear)

    关于grails - 在Grails中,如何在单元测试中模拟GrailsDomainBinder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13755837/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com