当前位置: 首页 > 知识库问答 >
问题:

Spring的MockMvc用于单元测试还是集成测试?

冯翔
2023-03-14

Spring对MockMvc有2个设置:

  1. 独立设置
  2. WebApplication Context安装

一般来说,MockMvc用于哪种测试?单元还是集成?或者两者兼而有之?

使用独立设置(运行在Spring应用程序上下文之外)允许您编写单元测试,而使用WebApplication Context设置您可以编写集成测试,这是对的吗?

共有2个答案

璩涵衍
2023-03-14

我想说的是,这两种方法都是用于集成测试的,但独立的方法会迫使您指定要测试的控制器。

WebApplicationContext安装程序正在加载整个上下文,所以您不必关心服务于例如/peoplePOST请求的特定控制器在哪里。

因此,我建议使用WebApplicationContext设置来测试REST API,测试应用程序需要使用的接口。你不需要将测试与实际代码结合起来,然后你就可以记录应用程序的行为方式。

翟弘
2023-03-14

这两种形式实际上都是集成测试,因为您正在测试代码与SpringDispatcherServlet和支持架构体系的集成。区别在于幕后使用的支持架构体系的数量。

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

  • 服务器端测试

值得注意的摘录:

“webAppContextSetup”加载实际的Spring MVC配置,从而进行更完整的集成测试。由于TestContext框架缓存加载的Spring配置,因此即使添加了更多测试,它也有助于保持测试快速运行。此外,您可以通过Spring配置将模拟服务注入控制器中,以便集中精力测试web层。

......

另一方面,“独立测试”更接近单元测试。它一次测试一个控制器,控制器可以手动注入模拟依赖项,并且不涉及加载Spring配置。这样的测试更加注重风格,并且更容易看到哪个控制器正在被测试,是否需要任何特定的Spring MVC配置才能工作,等等。“standaloneSetup”也是一种非常方便的方法,可以编写特别测试来验证某些行为或调试问题。

......

就像集成和单元测试一样,没有正确或错误的答案。使用“标准设置”确实意味着需要一些额外的“网络应用上下文设置”测试来验证Spring MVC配置。或者,您可以决定用“网络应用上下文设置”编写所有测试,并始终针对实际的Spring MVC配置进行测试。

......

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

当有疑问时,我建议在这里发布问题之前先阅读参考手册。;)

祝好

Sam(Spring TestContext框架的作者)

 类似资料:
  • 我想为类“ImageController”创建单元测试。由于映像必须由创建的用户拥有,所以我希望在执行单元测试之前创建一个用户(使用@before)。如何创建此用户?在测试UserController本身时,我做了如下操作:

  • 我有以下测试类: 这将导致HTTP 200而不是401。我启用了组件扫描和自动配置,并在我的SecuityConfiguration类中配置了Spring Security性,如下所示: 如果我使用RestTemplate访问,那么我将获得预期的行为(HTTP 401)。 null 因此,我不希望手动添加安全过滤器链,因为我(不正确?)期望这“只是工作”由于自动配置魔术在Spring引导? 提前谢

  • 单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet

  • 我正在为我的Spring MVC控制器设置单元测试,并试图利用Spring MVC测试框架。对于控制器中的每个endpoint,我希望确保只有具有指定权限的用户才能访问。我的问题是,在使用mockMvc工具解决这个问题时,我使用了一个自定义用户实现,并获得了类强制转换异常。 对于每个请求,我希望它看起来像这样: 我想以某种方式调整上述语句,以指定我的自定义用户主体。请参见下面Spring的用户方法

  • 我有一个应用程序,使用经典的Spring配置与xml,它可以使用Spring启动仅用于单元测试? 像这样: