PageRenderer在单元测试期间返回null对象

时间:2016-03-16 15:40:50

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

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

该服务在多个地方使用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

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

2 个答案:

答案 0 :(得分:1)

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

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

示例代码:

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

答案 1 :(得分:-1)

我最终做了这样的事情以使其发挥作用。

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