Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails mockhttpservletrequest spock返回null_Grails_Spock - Fatal编程技术网

Grails mockhttpservletrequest spock返回null

Grails mockhttpservletrequest spock返回null,grails,spock,Grails,Spock,我正在尝试编写一个函数,它需要请求.getHeader('X-File-Size')返回一个长字符串。所以我试着这样写测试: given: MockHttpServletRequest request = new MockHttpServletRequest() request.getHeader('X-File-Size') >> 2L when: controller.handle() then: 1 * serviceMock.upload(_ as Lon

我正在尝试编写一个函数,它需要
请求.getHeader('X-File-Size')
返回一个长字符串。所以我试着这样写测试:

given:
  MockHttpServletRequest request = new MockHttpServletRequest()
  request.getHeader('X-File-Size') >> 2L

when:
  controller.handle()

then:
  1 * serviceMock.upload(_ as Long)
这就是我的控制器的外观:

def handle() {
  def fileSize = request.getHeader('X-File-Size') as Long
  uploadFileService.upload(fileSize)
}

但它表示我正在向服务方法传递null,而不是字符串。我认为mock将返回一个long而不是null。

使用这行代码:

MockHttpServletRequest request = new MockHttpServletRequest()
您不创建模拟对象,而是创建真实对象。要创建模拟对象,需要使用测试超类中的
Mock
GroovyMock
方法(应该是
Specification
)。因此:

在测试控制器时,一旦a可用,您是否尝试过此方法

setup:
    def key = 'X-File-Size'
    def value = 2L
    request.addHeader(key, value)

when:
    controller.handle()

then:
    1 * serviceMock.upload(value)

哦这个名字很容易让人误解。为什么我不能直接执行HttpServletRequest=Mock()?不知道。提供一个样本项目,然后也许我可以帮助你。如果你觉得我的答案有用,请接受并投票。
setup:
    def key = 'X-File-Size'
    def value = 2L
    request.addHeader(key, value)

when:
    controller.handle()

then:
    1 * serviceMock.upload(value)