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