Spring的MockMvc用于单元测试或集成测试吗?

Sof*_*per 14 java spring spring-mvc spring-test spring-test-mvc

Spring有两个MockMvc设置:

  1. 独立设置
  2. WebApplicationContext设置

一般来说,MockMvc用于什么样的测试?单位还是整合?或两者?

我是否正确地说使用独立设置(在Spring的应用程序上下文之外运行)允许您编写单元测试,并且使用WebApplicationContext设置可以编写集成测试?

Sam*_*nen 34

这两种形式实际上都是集成测试,因为您正在测试代码与Spring DispatcherServlet和支持基础架构的集成.不同之处在于幕后使用的支持基础架构的数量.

详细信息记录在Spring参考手册中.

值得注意的摘录:

"webAppContextSetup"加载实际的Spring MVC配置,从而产生更完整的集成测试.由于TestContext框架缓存了加载的Spring配置,因此即使添加了更多测试,它也有助于保持测试快速运行.此外,您可以通过Spring配置将模拟服务注入控制器,以便继续专注于测试Web层.

...

另一方面,"standaloneSetup"更接近单元测试.它一次测试一个控制器,控制器可以手动注入模拟依赖项,并且不涉及加载Spring配置.这些测试更侧重于样式,并且更容易查看正在测试哪个控制器,是否需要任何特定的Spring MVC配置,等等."standaloneSetup"也是编写临时测试以验证某些行为或调试问题的一种非常方便的方法.

...

就像集成与单元测试一样,没有正确或错误的答案.使用"standaloneSetup"确实意味着需要一些额外的"webAppContextSetup"测试来验证Spring MVC配置.或者,您可以决定使用"webAppContextSetup"编写所有测试,并始终针对实际的Spring MVC配置进行测试.

...

Spring MVC Test中提供的选项在从经典单元到完全集成测试的规模上是不同的停止.确保Spring MVC Test中没有一个选项是经典的单元测试,但它们更接近它.例如,您可以使用注入控制器的模拟隔离服务层,然后您只通过DispatcherServlet和实际的Spring配置测试Web层,就像您可以单独测试数据库层一样.或者您可以使用一次集中在一个控制器上的独立设置,并手动提供使其工作所需的配置.

如有疑问,我建议您在发布问题之前先阅读参考手册.;)

问候,

Sam(Spring TestContext Framework的作者)