设置选项
MockMvc 可以通过两种方式之一进行设置。
WebApplicationContext
-
指向包含 Spring MVC 和控制器基础设施的 Spring 配置。
- 独立
-
直接指向要测试的控制器并以编程方式配置 Spring MVC 基础设施。
应该使用哪种设置选项?
基于WebApplicationContext
的测试会加载您实际的 Spring MVC 配置,从而产生更完整的集成测试。由于 TestContext 框架会缓存加载的 Spring 配置,因此即使在测试套件中使用相同的配置引入更多测试时,它也有助于保持测试运行速度。此外,您可以使用@MockitoBean
或@TestBean
覆盖控制器使用的服务,以便专注于测试 Web 层。
另一方面,独立测试更接近于单元测试。它一次测试一个控制器。您可以手动将控制器注入模拟依赖项,并且不涉及加载 Spring 配置。此类测试更侧重于样式,并且更容易查看正在测试哪个控制器、是否需要任何特定的 Spring MVC 配置才能工作等等。独立设置也是编写临时测试以验证特定行为或调试问题的一种非常方便的方式。
与大多数“集成与单元测试”辩论一样,没有正确或错误的答案。但是,使用独立测试确实意味着需要额外的集成测试来验证您的 Spring MVC 配置。或者,您可以使用WebApplicationContext
编写所有测试,以便它们始终针对您的实际 Spring MVC 配置进行测试。