这是一个演示控制器。
@PostMapping("/rest/new")
public ResponseEntity<MessageDto> newUser(@RequestBody UserDto userDto) {
return ResponseEntity.ok(new MessageDto().setMessage(userService.createUser(userDto)));
}
这是服务层。
@Override
public String createUser(UserDto userDto) {
// Do Something
return "Successful!!";
}
这是测试控制器的测试代码
@Test
public void testPostRestController() throws Exception {
UserDto userDto = new UserDto();
userDto.setName("AA");
userDto.setEmail("a@a.a");
userDto.setId((long) 1);
when(userService.createUser(userDto)).thenReturn("Successful!!");
mockMvc.perform(post("/rest/new")
.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
.content(new ObjectMapper().writeValueAsString(userDto)))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
.andExpect(jsonPath("$.message", is(userService.createUser(userDto))))
.andDo(MockMvcResultHandlers.print());
}
问题是当我运行测试代码时,它应该检查响应状态和响应消息。响应状态匹配,但问题是响应消息始终返回为空。
错误:
java.lang.AssertionError: JSON path "$.message"
Expected: is "Successful!!"
but: was null
我在这里错过了什么吗?
答案 0 :(得分:0)
尝试使用
when(userService.createUser(any(UserDto.class))).thenReturn("Successful!!");
而不是
when(userService.createUser(userDto)).thenReturn("Successful!!");
这应该理想地修复NPE