【问题标题】:PageRenderer returning null object during unit testPageRenderer 在单元测试期间返回空对象
【发布时间】:2016-03-16 15:40:50
【问题描述】:

我的任务是为现有服务编写单元测试。

该服务在多个地方使用 groovyPageRenderer,但我无法从 render 方法中获取除 null 之外的任何内容。

reportXml = groovyPageRenderer.render(template: templateName,  model: [summary:result?.summaryData,reportDate: reportDate ])

pdfRenderingService.render([document: XMLResource.load(new InputSource(new StringReader(reportXml))).document])

Caused by: java.lang.NullPointerException
    at java.io.StringReader.<init>(StringReader.java:50)

我知道代码可以正常工作,所以我在配置单元测试时肯定做错了。我这样做是为了将它注入到服务中。

def groovyPageRenderer
groovyPageRenderer = Mock(PageRenderer)
service.groovyPageRenderer = groovyPageRenderer

为了从渲染方法获得结果,我还缺少什么?

【问题讨论】:

    标签: unit-testing grails groovy grails-2.0 spock


    【解决方案1】:

    您正在注入模拟,这是一个好的开始,但您必须告诉模拟在使用时的行为方式。现在,您还没有给 render 方法任何行为,所以它只是返回 null

    您必须在 Spock 中设置一些交互,as explained in the documentation

    示例代码:

    groovyPageRenderer.render(_) >> "<some>xml</some>"
    

    【讨论】:

    • 我很确定它没有,因为参数不匹配。你读过文档吗?
    【解决方案2】:

    我最终做了这样的事情来让它发挥作用。

    groovyPageRenderer.metaClass.render = {Map param -> return "something"}
    

    【讨论】:

      猜你喜欢
      • 2018-02-16
      • 2011-08-22
      • 1970-01-01
      • 2014-01-18
      • 2020-08-13
      • 1970-01-01
      • 2019-09-07
      • 2022-01-01
      • 2022-01-24
      相关资源
      最近更新 更多