Spring的MockMvc是用于unit testing还是集成测试?
Spring有两个MockMvc设置:
- 独立设置
- WebApplicationContext设置
一般来说,MockMvc用于什么样的测试? 单位还是整合? 或两者?
我正确地说,使用独立设置(在Spring的应用程序上下文之外运行)允许您编写unit testing,并且使用WebApplicationContext设置可以编写集成测试吗?
这两种forms实际上都是集成测试,因为您正在测试代码与Spring DispatcherServlet
和支持基础结构的集成。 不同之处在于幕后使用的支持基础架构的数量。
详细信息记录在Spring参考手册中。
- 服务器端测试
- 设置选项
- 与端到端集成测试的差异
值得注意的摘录:
“webAppContextSetup”加载实际的Spring MVC配置,从而产生更完整的集成测试。 由于TestContext框架缓存了加载的Spring配置,因此即使添加了更多测试,它也有助于保持测试快速运行。 此外,您可以通过Spring配置将模拟服务注入控制器,以便继续专注于测试Web层。
…
另一方面,“standaloneSetup”更接近unit testing。 它一次测试一个控制器,控制器可以手动注入模拟依赖项,并且不涉及加载Spring配置。 这些测试更侧重于样式,并且更容易看到正在测试哪个控制器,是否需要任何特定的Spring MVC配置,等等。 “standaloneSetup”也是编写临时测试以validation某些行为或调试问题的一种非常方便的方法。
…
就像集成与unit testing一样,没有正确或错误的答案。 使用“standaloneSetup”确实意味着需要一些额外的“webAppContextSetup”测试来validationSpring MVC配置。 或者,您可以决定使用“webAppContextSetup”编写所有测试,并始终针对实际的Spring MVC配置进行测试。
…
Spring MVC Test中提供的选项在从经典单元到完全集成测试的规模上是不同的停止。 确保Spring MVC Test中没有任何选项是经典的unit testing,但它们更接近它。 例如,您可以使用注入控制器的模拟隔离服务层,然后您只通过DispatcherServlet和实际的Spring配置测试Web层,就像您可以单独测试数据库层一样。 或者您可以使用一次集中在一个控制器上的独立设置,并手动提供使其工作所需的配置。
如有疑问,我建议您在发布问题之前先阅读参考手册。 ;)
问候,
Sam( Spring TestContext Framework的作者 )
我会说两种方法都用于集成测试,但是独立强制您指定要测试的控制器。
WebApplicationContext设置正在加载整个上下文,因此您不关心特定控制器的位置,例如/people
POST请求。
所以我建议使用WebApplicationContext设置来根据应用程序需要使用的接口来测试REST API。 您不会将测试与实际代码相结合然后+您正在记录应用程序的行为方式。