单元测试弹簧控制器 - 是否使用MockMvc或直接调用方法

时间:2016-03-13 16:49:01

标签: java spring unit-testing

在为Spring控制器编写单元测试时,最好是使用MockMvc,还是直接调用控制器函数?

2 个答案:

答案 0 :(得分:1)

我更喜欢使用MockMvc,因为它正在测试我的Controller,即请求映射。

如果您直接致电控制器,则不会测试注释。

答案 1 :(得分:-1)

使用MockMvc进行测试对于单元测试控制器更好,因为如接受的答案所述,它将测试请求映射,而不仅仅是功能代码。 对于轻量级单元测试,最好在MockMvcBuilder中使用standAloneSetup Builder,这样就不需要加载Application Context。对于集成测试,我们可以使用webAppContextSetup(根据http://www.leveluplunch.com/java/tutorials/030-testing-spring-rest-webservice-controllers/

示例代码(Mockito,jsonpath,杰克逊也是)

userService = mock(UserService.class);
userController = new UserController(userService);
mockMvc = MockMvcBuilders.standAloneSetup(userController);
// stub userService calls
LoginRequest body = new LoginRequest();
// set loginrequest fields
ObjectMapper mapper = new ObjectMapper();
mockMvc.perform(post("/login").content(mapper.writeValueAsString(loginRequest)
    .contentType(MediaType.APPLICATION_JSON))
    .andExpect(status().isOk())
    .andExpect(jsonPath("$.userId").value("expected_value"));