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"))