Spring引导restful服务使用Junit

时间:2018-05-16 05:19:16

标签: rest unit-testing spring-boot junit

这是一个演示控制器。

@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

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

尝试使用

when(userService.createUser(any(UserDto.class))).thenReturn("Successful!!");

而不是

when(userService.createUser(userDto)).thenReturn("Successful!!");

这应该理想地修复NPE

相关问题