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)