【问题标题】:mockhttpservletrequest spock returning nullmockhttpservletrequest spock 返回 null
【发布时间】:2014-04-21 08:33:03
【问题描述】:

我正在尝试编写一个需要 request.getHeader('X-File-Size') 来返回 Long 的代码。所以我试着这样写测试:

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 而不是字符串传递给服务方法。我认为模拟会返回一个 long 而不是 null。

【问题讨论】:

  • 如果您觉得我的回答有用,请接受并点赞。

标签: grails spock


【解决方案1】:

有了这行代码:

MockHttpServletRequest request = new MockHttpServletRequest()

您创建的不是模拟对象而是真实对象。要创建一个模拟对象你需要使用来自测试超类的MockGroovyMock 方法(应该是Specification)。所以:

MockHttpServletRequest request = Mock()//GroovyMock()
request.getHeader('X-File-Size') >> 2L

【讨论】:

  • 哦。这个名字非常具有误导性。为什么我不能只做HttpServletRequest request = Mock()
  • 不知道。提供一个示例项目然后也许我可以帮助你。
【解决方案2】:

在测试控制器时,一旦mock request 可用,您尝试过吗?

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

when:
    controller.handle()

then:
    1 * serviceMock.upload(value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多