【问题标题】:Error in MockMvc test case for controller控制器的 MockMvc 测试用例中的错误
【发布时间】:2016-08-08 12:41:38
【问题描述】:

我为控制器层方法编写了一个 jUnit 测试用例,但由于预期结果不匹配而失败。 测试用例如下:

 @Test
    public void testGetNodeStatusCount() throws Exception {

        ListNodes listNodes = new ListNodes();
       // ArgumentCaptor<Integer> userId = ArgumentCaptor.forClass(Integer.class);
        when(userManagementHelper.getNodeStatusCount(0)).thenReturn(
            new ResponseEntity<ListNodes>(listNodes, new HttpHeaders(),
                HttpStatus.OK));

        mockMvc.perform(get("/usermgmt/nodestatus")).andExpect(status().isOk());

    }

这个测试用例的编写方法如下:

@RequestMapping(value = "/nodestatus", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public ResponseEntity<ListNodes> getNodeStatusCount(@RequestParam("userId") int userId) {
        return userManagementHepler.getNodeStatusCount(userId);
    } 

失败消息是:

我没有得到的是,如果 status 已设置为 OK,那么我将如何获得 400 而不是 200。

我对“控制器”的这个 MockMVC 测试还很陌生,所以请建议我学习这个的来源。

【问题讨论】:

    标签: java spring-mvc junit mockito


    【解决方案1】:

    您的控制器需要一个必需的请求参数,这就是您获得状态 400(错误请求)的原因

    您可以修改您的测试以包含此请求参数 mockMvc.perform(get("/usermgmt/nodestatus?userId=0")).andExpect(status().isOk());

    或者您可以将请求参数设为可选 @RequestParam(value = "userId", required = false, defaultValue = "0")

    【讨论】:

    • 谢谢你的回答,你能不能给我推荐一个资源来学习这一切
    • 抱歉,我故意没有添加任何链接,因为这些链接会随着时间而改变。你的方法是正确的,如果你用谷歌搜索“mockMvc 教程”,你会发现很多链接。 mockMvc 中唯一有点棘手的是异步测试,因为你的控制器不是异步的,所以你应该没问题
    猜你喜欢
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多