|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
设置选择
MockMvc 可以通过两种方式设置。一种是直接指向你控制的控制器 想测试并编程配置 Spring MVC 基础设施。第二种是 指向带有Spring MVC和控制器基础设施的Spring配置。
要设置 MockMvc 来测试特定控制器,请使用以下工具:
-
Java
-
Kotlin
class MyWebTests {
MockMvc mockMvc;
@BeforeEach
void setup() {
this.mockMvc = MockMvcBuilders.standaloneSetup(new AccountController()).build();
}
// ...
}
class MyWebTests {
lateinit var mockMvc : MockMvc
@BeforeEach
fun setup() {
mockMvc = MockMvcBuilders.standaloneSetup(AccountController()).build()
}
// ...
}
或者你也可以在通过WebTestClient测试时使用这种设置,它会委派给同一个构建者 如上所示。
通过Spring设置MockMvc配置,请使用以下方法:
-
Java
-
Kotlin
@SpringJUnitWebConfig(locations = "my-servlet-context.xml")
class MyWebTests {
MockMvc mockMvc;
@BeforeEach
void setup(WebApplicationContext wac) {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
// ...
}
@SpringJUnitWebConfig(locations = ["my-servlet-context.xml"])
class MyWebTests {
lateinit var mockMvc: MockMvc
@BeforeEach
fun setup(wac: WebApplicationContext) {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build()
}
// ...
}
或者你也可以在通过WebTestClient测试时使用这种设置,它会委派给同一个构建者 如上所示。
你应该选择哪种设置方式?
这webAppContext设置加载你的实际 Spring MVC 配置,导致
完整的积分测试。由于 TestContext 框架缓存已加载的 Spring
配置,它有助于保持测试快速运行,即使你在你的
测试室。此外,你还可以通过 Spring 向控制器注入模拟服务
配置以保持对网页层的测试。以下示例声明
莫基托的模拟礼拜:
<bean id="accountService" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="org.example.AccountService"/>
</bean>
然后你可以将模拟服务注入测试中,以设置并验证你的 期望值,正如以下例子所示:
-
Java
-
Kotlin
@SpringJUnitWebConfig(locations = "test-servlet-context.xml")
class AccountTests {
@Autowired
AccountService accountService;
MockMvc mockMvc;
@BeforeEach
void setup(WebApplicationContext wac) {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
// ...
}
@SpringJUnitWebConfig(locations = ["test-servlet-context.xml"])
class AccountTests {
@Autowired
lateinit var accountService: AccountService
lateinit var mockMvc: MockMvc
@BeforeEach
fun setup(wac: WebApplicationContext) {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build()
}
// ...
}
这独立设置而 则更接近单元测试。它考验一个人
一次控制一个。你可以手动注入模拟依赖关系给控制器,并且
它不涉及加载Spring配置。这类测试更注重风格
并使得更容易看到测试的是哪个控制器,是否使用特定的Spring
MVC配置必须才能正常工作,依此类推。这独立设置也是非常非常
方便地编写临时测试以验证特定行为或调试问题。
和大多数“集成测试与单元测试”的争论一样,没有对错之分
答。然而,使用独立设置确实意味着需要额外的webAppContext设置测试以验证你的Spring MVC配置。
或者,你可以用webAppContext设置,为了总是
用你实际的Spring MVC配置来测试。