【问题标题】:Mockmvc using spock test errorMockmvc 使用 spock 测试错误
【发布时间】:2018-04-11 05:31:05
【问题描述】:

我正在使用 spock 框架为 spring 3 控制器类编写测试。尝试执行其中一项测试(GET 请求)时出现以下错误。请注意,同一类中的所有其他测试(POST 请求)都按预期工作。

控制器签名

@RequestMapping(value = "/{accountHolderId}/xyz", method = GET)
public @ResponseBody BaseResponse getHistoryByHolderId(
        HttpServletRequest request,
        @PathVariable String accountHolderId)

斯波克测试

def "GetHistoryByHolderId"() {

        def accountHolderId = 'x@y.com'

        when: 'an http call is performed to get fund transfer history by accountHolderId'
        def response = mockMvc.perform(
                get('/{accountHolderId}/xyz',accountHolderId))
                .andExpect(status().isOk())
                .andReturn().response

        def result = new JsonSlurper().parseText(response.contentAsString)
    }

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.IllegalArgumentException:参数类型 [java.lang.String] 的名称不可用,并且在类文件中也找不到参数名称信息。

【问题讨论】:

  • 控制器类和 spock 测试是什么样的?请更新您的问题并提供更多详细信息。
  • 更新@SzymonStepniak
  • 请注意,我也尝试将@PathVariable("accountHolderId") String accountHolderId 添加到控制器签名中,但没有成功

标签: spring testing controller spock


【解决方案1】:

解决了这个问题。原因是我在监视控制器类,即方法目标在 Spock 代理类上(而不是代理原始方法),并且 spring 无法正确读取注释。因此,它无法识别路径变量和请求参数。

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 2020-08-02
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多