我的控制器
@RequestMapping(value="/login", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
public User login(@RequestBody User user){
User u = userService.validateUser(user);
if(u != null){
return u;
}
return null;
}
这是我对控制器的测试用例
@Test
public void testUserController() throws Exception {
User u = new User();
u.setEmail("12a@gm.com");
u.setPassword("00000");
Gson gson = new Gson();
String data = gson.toJson(u);
when(userService.validateUser(u)).thenReturn(new User());
String response = mockMvc.perform(post("/login").contentType(MediaType.APPLICATION_JSON).content(data)).andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
assertTrue(response.equals("hi"));
}
我正在将User对象转换为字符串,并将其发布到controller方法。我正在尝试模拟服务方法,其中userService.validateUser()将返回新的空User对象。由于发布到服务方法的对象与控制器接收的对象不同,因此服务返回null。如何使服务方法返回空用户对象?
答案 0 :(得分:0)
您在测试用例中创建的用户对象(通过mockMvc
传递)是通过login
方法传递的对象的另一个实例。
您可以在when().then()
中使用通配符接受:
when(userService.validateUser(Mockito.any(User.class))).thenReturn(new User());
或我将使用的语法:
doReturn(new User()).when(userService).validateUser(Mockito.any(User.class));