设置选项
MockMvc 可以通过以下两种方式之一进行设置。
WebApplicationContext-
指向包含 Spring MVC 和控制器基础设施的 Spring 配置。
- 独立运行
-
直接指向您要测试的控制器,并以编程方式配置 Spring MVC 基础设施。
应使用哪种设置选项?
基于 WebApplicationContext 的测试会加载您实际的 Spring MVC 配置,
从而实现更完整的集成测试。由于 TestContext 框架会缓存已加载的 Spring 配置,
即使您在测试套件中使用相同配置引入更多测试,也能帮助保持测试的快速运行。
此外,您可以使用 @MockitoBean 或 @TestBean 来替换控制器所使用的服务,
以便专注于 Web 层的测试。
另一方面,独立测试更接近于单元测试。它一次只测试一个控制器。你可以手动将控制器注入模拟的依赖项,并且不涉及加载 Spring 配置。这类测试更具针对性,能更清楚地看出正在测试的是哪个控制器、是否需要特定的 Spring MVC 配置才能正常工作等等。独立设置方式也是编写临时测试以验证特定行为或调试问题的一种非常便捷的方法。
与大多数“集成测试与单元测试”的争论一样,这里没有绝对的对错之分。
然而,使用独立测试确实意味着你需要额外的集成测试来验证你的 Spring MVC 配置。
或者,你可以全部使用 WebApplicationContext 编写测试,这样它们始终针对你实际的 Spring MVC 配置进行测试。