为什么@WebMvcTest Http Post方法是ResponseEntity <?>返回`null`

时间:2019-07-02 14:57:44

标签: spring-boot spring-boot-test

  • 我在@WebMvcTest Spring引导测试代码上进行编码
  • HTTP Post方法测试
  • 但Post方法测试代码返回null
  • 但Controller层是Post Mapping方法具有返回值(例如ResponseEntity

控制器层

@PostMapping("/api/todos")
public ResponseEntity<ResponseTodoDto> createTodo(@RequestBody RequestTodoDto requestTodoDto){

    final ResponseTodoDto savedResponseTodoDto = todoService.createTodo(requestTodoDto);

    return ResponseEntity.ok().body(savedResponseTodoDto);
}

测试代码

@Test
public void Todo_등록_API_Test() throws Exception {

    ObjectMapper objectMapper = new ObjectMapper();

    RequestTodoDto requestTodoDto = new RequestTodoDto();
    requestTodoDto.setContent("테스트 코드 작성하기");

    ResponseTodoDto responseTodoDto = new ResponseTodoDto();
    responseTodoDto.setId(1L);
    responseTodoDto.setContent("테스트 코드 작성하기");
    responseTodoDto.setCreateDate(LocalDateTime.now());
    responseTodoDto.setUpdateDate(LocalDateTime.now());


    // given
    given(todoService.createTodo(requestTodoDto)).willReturn(responseTodoDto);

    MvcResult result = mockMvc.perform(post("/api/todos")
                .content(objectMapper.writeValueAsString(requestTodoDto))
                .contentType(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andReturn();


    /** empty  **/
    log.debug(result.getResponse().getContentAsString());
}
  • 我希望log.debug的输出为[{“ id”:1,“ content”:“테스트작성하기”,“ createDate”:“ 2019-07-02T23:43:09.636”,“ updateDate” :“ 2019-07-02T23:43:09.636”}] ,但日志调试为空

+) TodoService 并且TodoService @Service批注标记在代码上

喜欢〜

@Service
public class TodoService { ... }
@Transactional
ResponseTodoDto createTodo(final RequestTodoDto dto){

    Todo todo = Todo.builder()
            .content(dto.getContent())
            .build();

    Todo savedTodo = todoRepository.save(todo);

    return modelMapperUtils.map(savedTodo, ResponseTodoDto.class);
}

0 个答案:

没有答案