【发布时间】:2018-04-21 08:57:23
【问题描述】:
我想为我的@RestController 之一编写一个简单的测试,并断言输入@RequestBody 已正确映射到PersonDTO:
@RestController
public class PersonServlet {
@PostMapping("/person")
public PersonRsp find(@RequestBody PersonDTO dto) {
//business logic
}
}
public class PersonDTO {
private String firstname, lastname;
}
问题:如何向该 servlet 发送 JSON 请求正文。还要检查所有已正确设置的PersonDTO 字段?
可能与此类似,但我不知道如何检查/窥探已解析的 DTO?
@RunWith(SpringRunner.class)
@WebMvcTest(PersonSerlvet.class)
public class PersonTests {
@Autowired
private MockMvc mvc;
@Test
public void testExample() throws Exception {
this.mvc.perform(get("/person"))
.andExpect(status().isOk());
}
}
@Duplicate 标记:这不是链接问题的副本(关于如何读取响应正文字符串)。我实际上是在要求请求正文测试。
【问题讨论】:
-
¿使用记录器?
-
我不认为验证记录器输出是一个好的单元测试断言!
-
事实上,您不是要求进行单元测试,而是要进行集成测试,如果您想在测试中测试输入并且不修改它以用于生产,您可以使用模拟 appender 或方法拦截器。
-
不,我要求测试单个方法,只是将请求(输入)解析到由 spring 基于输入构造的 DTO(@RequestBody)。
-
为什么叫控制器PersonServlet?它与 @RestController 注释相矛盾。这是一个很好的示例 HelloControllerIT,解释了如何测试 Spring Boot 控制器。 spring.io/guides/gs/spring-boot 。为了测试输入参数,您可以使用 Test Spy xunitpatterns.com/Test%20Spy.html
标签: java spring spring-mvc junit spring-test