【发布时间】:2021-11-03 09:42:01
【问题描述】:
我正在使用MockMvc 测试@RestController POST 端点。
在此测试中,MockHttpServletResponse 内容始终为空且未设置内容类型。
我检查了控制器方法;它被调用并返回正确的响应。
在测试中,状态码被正确设置为 201。
这是测试:
@Test
public void testBookCreation() throws Exception {
var response = mockMvc.perform(
MockMvcRequestBuilders
.post("/books/create")
.contentType(MediaType.APPLICATION_JSON)
.content(
jsonb.toJson(new Book("KR","K & R",5,8))
)
).andExpect(
MockMvcResultMatchers.status().isCreated()
).andExpect(
MockMvcResultMatchers.content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)
).andExpect(
MockMvcResultMatchers.jsonPath("$.author").exists()
).andDo((result)->{
System.out.println(result.getResolvedException());
System.out.println(result.getResponse());
}).andReturn();
}
这是控制器方法:
@PostMapping("/create")
@ResponseStatus(code=HttpStatus.CREATED,reason="Book created")
public Book makeBook(@RequestBody Book b ) {
var res = bookRepository.save(b);
System.out.println(res);
return res;
}
我认为问题出在测试而不是控制器本身。
【问题讨论】:
标签: java spring-boot spring-mvc spring-mvc-test