控制器的MockMvc测试用例出错

时间:2016-08-08 12:41:39

标签: java spring-mvc junit mockito

我已经为控制器层方法编写了一个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);
    } 

失败消息是: enter image description here

我没有得到的是,如果状态设置为确定,而不是我获得400而不是200。

我对MockMVC测试“控制器”的新手还有一件事,所以请建议我学习这个的来源。

1 个答案:

答案 0 :(得分:1)

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

的原因

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

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