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

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

我知道代码可以工作,因此在配置单元测试时我必须做错了什么。我这样做是为了将其注入(inject)服务。
def groovyPageRenderer
groovyPageRenderer = Mock(PageRenderer)
service.groovyPageRenderer = groovyPageRenderer

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

最佳答案

您正在注入(inject)模拟,这是一个好的开始,但是您必须告诉模拟在使用时如何表现。现在,您尚未赋予render方法任何行为,因此它只是返回null

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

示例代码:

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

10-06 01:07