我正在尝试对服务进行单元测试,我想使用模拟来覆盖域对象上的方法,该方法从数据库中检索文件。
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)
答案 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])