设置选项
MockMvc可以通过两种方式之一进行配置。
WebApplicationContext
指向包含Spring MVC和控制器基础设施的Spring配置。
独立型;独立运行的
直接指向您想要测试的控制器,并以编程方式配置Spring MVC基础设施。
您应该使用哪种设置选项?
基于WebApplicationContext的测试会加载实际的Spring MVC配置,从而实现更完整的集成测试。由于TestContext框架会缓存已加载的Spring配置,即使你在测试套件中引入更多使用相同配置的测试,也有助于保持测试运行的速度。此外,你可以使用@MockitoBean或@TestBean来覆盖控制器使用的服务,以便专注于测试Web层。
另一方面,独立测试(standalone test)更接近单元测试(unit test)。它一次只测试一个控制器。你可以手动为控制器注入模拟依赖(mock dependencies),并且这种测试不涉及加载Spring配置。这类测试更注重测试的清晰性,便于查看当前正在测试的是哪个控制器,以及运行该控制器是否需要特定的Spring MVC配置等。独立测试环境也是编写临时测试(ad-hoc tests)来验证特定行为或调试问题的非常便捷的方式。
与大多数“集成测试与单元测试之争”一样,没有绝对的对错答案。然而,使用独立测试确实意味着需要额外的集成测试来验证你的Spring MVC配置。或者,你可以使用WebApplicationContext来编写所有的测试,这样它们就总是针对实际的Spring MVC配置进行测试了。