使用mockFor和MockDomain发出重写方法

时间:2013-01-15 20:08:45

标签: unit-testing grails

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

    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 demand功能返回此Mock域。到达MockDomain行时抛出Assertion错误

  

junit.framework.AssertionFailedError:无法调用'getClass'   在此刻。仍然有1个电话要求'getFile'。在   groovy.mock.interceptor.StrictExpectation.match(StrictExpectation.groovy:56)     at grails.test.GrailsMock.createMock_closure1(GrailsMock.groovy:136)     在   grails.test.MockUtils.updateMetaClassForClass_closure95(MockUtils.groovy:1297)     在groovy.lang.Closure.call(Closure.java:412)at   groovy.lang.Closure.call(Closure.java:425)at   grails.test.MockUtils.updateMetaClassForClass(MockUtils.groovy:1294)     在grails.test.MockUtils.mockDomain(MockUtils.groovy:470)at   grails.plugin.spock.UnitSpec.mockDomain(UnitSpec.groovy:141)at at   com.genospace.inbound.pg.HemeCNVPipelineTestSpec.test处理血红素   文件(HemeCNVPipelineTestSpec.groovy:66)

1 个答案:

答案 0 :(得分: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])