配置 MockMvcTester
MockMvcTester
可以通过两种方式之一进行设置。一种方式是直接指向你想要测试的控制器,并以编程方式配置 Spring MVC 基础设施。第二种方式是指向包含 Spring MVC 和控制器基础设施的 Spring 配置。
提示
关于这两种模式的比较,请查看设置选项。
要为特定控制器设置 MockMvcTester
进行测试,请使用以下方法:
- Java
- Kotlin
public class AccountControllerStandaloneTests {
private final MockMvcTester mockMvc = MockMvcTester.of(new AccountController());
// ...
}
class AccountControllerStandaloneTests {
val mockMvc = MockMvcTester.of(AccountController())
// ...
}
要通过 Spring 配置设置 MockMvcTester
,请使用以下内容:
- Java
- Kotlin
@SpringJUnitWebConfig(ApplicationWebConfiguration.class)
class AccountControllerIntegrationTests {
private final MockMvcTester mockMvc;
AccountControllerIntegrationTests(@Autowired WebApplicationContext wac) {
this.mockMvc = MockMvcTester.from(wac);
}
// ...
}
@SpringJUnitWebConfig(ApplicationWebConfiguration::class)
class AccountControllerIntegrationTests(@Autowired wac: WebApplicationContext) {
private val mockMvc = MockMvcTester.from(wac)
// ...
}
MockMvcTester
可以将 JSON 响应体或 JSONPath 表达式的结果转换为你的领域对象,前提是相关的 HttpMessageConverter
已注册。
如果你使用 Jackson 将内容序列化为 JSON,以下示例展示了如何注册转换器:
- Java
- Kotlin
@SpringJUnitWebConfig(ApplicationWebConfiguration.class)
class AccountControllerIntegrationTests {
private final MockMvcTester mockMvc;
AccountControllerIntegrationTests(@Autowired WebApplicationContext wac) {
this.mockMvc = MockMvcTester.from(wac).withHttpMessageConverters(
List.of(wac.getBean(AbstractJackson2HttpMessageConverter.class)));
}
// ...
}
@SpringJUnitWebConfig(ApplicationWebConfiguration::class)
class AccountControllerIntegrationTests(@Autowired wac: WebApplicationContext) {
private val mockMvc = MockMvcTester.from(wac).withHttpMessageConverters(
listOf(wac.getBean(AbstractJackson2HttpMessageConverter::class.java)))
// ...
}
备注
上述内容假设转换器已注册为一个 Bean。
最后,如果你手头有一个 MockMvc
实例,你可以通过使用 create
工厂方法提供要使用的 MockMvc
实例来创建一个 MockMvcTester
。