gpt4 book ai didi

unit-testing - 使用mockFor和MockDomain的问题覆盖方法

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

我正在尝试对服务进行单元测试,并且我想使用模拟覆盖域对象上的方法,该方法从数据库中检索文件。

    def mockElem = mockFor(DataElement, false)
mockElem.demand.getFile(){return tempFile}

def dataElem = mockElem.createMock()
dataElem.orderId = "123"
dataElem.id = tempFileName
dataElem.dataType = "cnv"
dataElem.dataStatus = DataStatus.TRANSFERED
mockDomain(DataElement, [dataElem])

当我在数据元素上调用动态查找器时,我希望此模拟域与getFile的mockFor需求功能一起返回。到达MockDomain行时,引发断言错误

junit.framework.AssertionFailedError: No call to 'getClass' expected at this point. Still 1 call(s) to 'getFile' expected. at groovy.mock.interceptor.StrictExpectation.match(StrictExpectation.groovy:56) at grails.test.GrailsMock.createMock_closure1(GrailsMock.groovy:136) at grails.test.MockUtils.updateMetaClassForClass_closure95(MockUtils.groovy:1297) at groovy.lang.Closure.call(Closure.java:412) at groovy.lang.Closure.call(Closure.java:425) at grails.test.MockUtils.updateMetaClassForClass(MockUtils.groovy:1294) at grails.test.MockUtils.mockDomain(MockUtils.groovy:470) at grails.plugin.spock.UnitSpec.mockDomain(UnitSpec.groovy:141) at com.genospace.inbound.pg.HemeCNVPipelineTestSpec.test processing Heme file(HemeCNVPipelineTestSpec.groovy:66)

最佳答案

不确定是什么问题。

您收到此错误是因为您两次模拟对象:

mockFor / createMock

  • mockDomain
  • mockDomain需要了解有关作为参数传递的对象的一些信息(此处验证类是否正确),但是 mockFor不允许调用 getClass():您未为此类调用添加 demand

    您是否真的需要使用 demand模拟?

    我认为简单的情况应该工作:
    def dataElem = new DataElement()
    dataElem.orderId = "123"
    dataElem.id = tempFileName
    dataElem.dataType = "cnv"
    dataElem.dataStatus = DataStatus.TRANSFERED

    dataElem.file = tempFile
    mockDomain(DataElement, [dataElem])

    关于unit-testing - 使用mockFor和MockDomain的问题覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14345971/

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