WebMvcTest: не удаётся записать json-строку в content

Пишу интеграционный тест. Хочу "пробить насквозь" свой микросервис, не пустив в БД и замокав на уровне ДАО.

@AutoConfigureMockMvc
@WebMvcTest(Controller.class)
@ComponentScan({
        "ru.some.root"
})
public class IntegrationTest {

    private static Dto dto = new Dto(
            "123",
            "076587d",
            "076578"
    );

    @Autowired
    private MockMvc mvc;

    @MockBean
    private DAO dao;

    @Test
    void updateMethodReturnOkWhenDAOReturnOk() throws Exception {
        doReturn(Arrays.asList(StringConstant.OK, StringConstant.OK)).when(dao).updateMethod(dto);

        String json = new ObjectMapper().writeValueAsString(dto);
        System.out.println(json);

        MvcResult mvcResult = mvc.perform(post("/api/v1/dto")
                .contentType(MediaType.APPLICATION_JSON)
                .content(json))
                .andDo(print())
                .andExpect(status().isOk())
                .andReturn();

        assertEquals(StringConstant.OK, mvcResult.getResponse().getContentAsString());
    }

Вот что получаю на выходе:

2020-03-04 10:55:03.001  INFO 280 --- [           main] ru.some.root.IntegrationTest             : No active profile set, falling back to default profiles: default
2020-03-04 10:55:04.260  INFO 280 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-03-04 10:55:04.456  INFO 280 --- [           main] o.s.b.t.m.w.SpringBootMockServletContext : Initializing Spring TestDispatcherServlet ''
2020-03-04 10:55:04.456  INFO 280 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Initializing Servlet ''
2020-03-04 10:55:04.468  INFO 280 --- [           main] o.s.t.web.servlet.TestDispatcherServlet  : Completed initialization in 12 ms
2020-03-04 10:55:04.495  INFO 280 --- [           main] ru.some.root.IntegrationTest             : Started IntegrationTest in 1.747 seconds (JVM running for 2.668)

{"dtoId":"123","employeeId":"076587d","secondEmployeeId":"076578"}

MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /api/v1/dto
       Parameters = {}
          Headers = [Content-Type:"application/json", Content-Length:"66"]
             Body = <no character encoding set>
    Session Attrs = {}

Handler:
             Type = ru.some.root.controller.Controller
           Method = ru.some.root.controller.Controller#updateMethod(Dto)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

Почему body в Request пустое?


Ответы (1 шт):

Автор решения: echoes

Пожалуй, стоит гуглить и на английском языке. Это решило мою проблему:

https://stackoverflow.com/questions/49956208/spring-controller-testing-with-mockmvc-post-method

Нужно добавить в запрос указание кодировки: .characterEncoding("utf-8"))

→ Ссылка