【发布时间】:2014-08-01 19:18:33
【问题描述】:
我有一个需要 XML 有效负载的 Grails 控制器。
我在 Grails 控制器中像这样获取 XML 有效负载。
def xmlPayload = request.reader.text
这部分工作正常,但我正在努力在单元测试中模拟这个有效负载。
我已经尝试了以下两种方法,但调试器在两种方法中都显示“request.reader”为空。
方法一:
void "test controller method"(){
setup:
def mockBufferedReader = Mock( BufferedReader )
mockBufferedReader.getText() >> '<hello/>'
request.getReader() >> mockBufferedReader
....
方法 #2:
void "test controller method"(){
setup:
def mockBufferedReader = Mock( BufferedReader )
mockBufferedReader.getText() >> '<hello/>'
request.metaClass.getReader = { -> mockBufferedReader }
....
单元测试中的“请求”是一个 GrailsMockHttpServletRequest,所以我想我可以像这样模拟它的方法(两种方法的第 3 行),但到目前为止还没有运气。
感谢您的任何想法。
【问题讨论】:
-
规范是否在 spock 块中(何时、然后等)?
-
不,这是在单个单元测试的开始;即,在任何 when:/then:/etc 之前的隐式“setup:”块中。块。我已将示例更新为更清晰。
-
request到底是什么?如果它不是一个模拟,你不能只是:a)覆盖方法b)设置reader属性c)......没有任何Groovy魔法。如果是模拟,则 #1 方法应该有效 -
您能提供一个最小的工作示例吗?
标签: unit-testing grails groovy spock