设置选项

MockMvc 可以通过两种方式进行设置。

WebApplicationContext

指向包含 Spring MVC 和控制器基础设施的 Spring 配置。

Standalone

直接指向您想要测试的控制器,并以编程式方式配置 Spring MVC 基础设施。

您应该使用哪种设置选项?

基于 WebApplicationContext 的测试会加载您实际的 Spring MVC 配置,从而得到更完整的集成测试。由于 TestContext 框架会缓存加载的 Spring 配置,因此即使在测试套件中引入更多使用相同配置的测试,也能保持测试运行快速。此外,您还可以使用 @MockitoBean@TestBean 覆盖控制器使用的服务,以便专注于测试 Web 层。

另一方面,Standalone 测试更接近于单元测试。它一次测试一个控制器。您可以手动向控制器注入模拟依赖项,并且不涉及加载 Spring 配置。这类测试更侧重于风格,更容易看出正在测试哪个控制器,是否需要特定的 Spring MVC 配置才能工作等等。Standalone 设置也是编写临时测试来验证特定行为或调试问题的非常方便的方法。

与大多数“集成测试 vs 单元测试”的争论一样,这里没有绝对正确或错误的答案。但是,使用 Standalone 测试意味着需要额外的集成测试来验证您的 Spring MVC 配置。另一种方法是,您可以使用 WebApplicationContext 编写所有测试,这样它们始终针对您实际的 Spring MVC 配置进行测试。