почему @WebMvcTest Http Post Метод is ResponseEntity <?> return `null` - PullRequest
0 голосов
/ 02 июля 2019
  • я пишу код теста загрузки @WebMvcTest Spring
  • HTTP-метод тестирования Post
  • но тестовый код метода Post возвращает null
  • но ControllerУровень пост-сопоставления имеет возвращаемое значение (например, 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);
}
...