0

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

    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:此时不应调用“getClass”。仍然需要 1 次调用“getFile”。在 groovy.mock.interceptor.StrictExpectation.match(StrictExpectation.groovy:56) 在 grails.test.GrailsMock.createMock_closure1(GrailsMock.groovy:136) 在 grails.test.MockUtils.updateMetaClassForClass_closure95(MockUtils.groovy:1297) 在 groovy。 lang.Closure.call(Closure.java:412) 在 grails.test.MockUtils.updateMetaClassForClass(MockUtils.groovy:1294) 在 grails.test.MockUtils.mockDomain 的 groovy.lang.Closure.call(Closure.java:425) (MockUtils.groovy:470) 在 grails.plugin.spock.UnitSpec.mockDomain(UnitSpec.groovy:141) 在 com.genospace.inbound.pg.HemeCNVPipelineTestSpec.test 处理血红素文件(HemeCNVPipelineTestSpec.groovy:66)

4

1 回答 1

1

不知道是什么问题。

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

  • 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])
于 2013-01-16T00:38:03.837 回答