跳到主要内容
版本:7.0.3

并行测试执行

Hunyuan 7b 中英对照 Parallel Test Execution

Spring TestContext框架提供了在单个JVM内并行执行测试的基本支持。一般来说,这意味着大多数测试类或测试方法都可以在不修改测试代码或配置的情况下并行运行。

提示

有关如何设置并行测试执行的详细信息,请参阅您的测试框架、构建工具或集成开发环境(IDE)的文档。

请记住,在测试套件中引入并发可能会导致意外的副作用、奇怪的运行时行为,以及间歇性或看似随机地失败的测试。因此,Spring团队提供了以下一般性指导原则,说明在什么情况下不应并行运行测试。

如果测试满足以下条件,请不要并行运行测试:

  • 使用 Spring Framework 的 @DirtiesContext 支持。
  • 使用 Spring Framework 的 @MockitoBean@MockitoSpyBean 支持。
  • 使用 Spring Boot 的 @MockBean@SpyBean 支持。
  • 使用 JUnit Jupiter 的 @TestMethodOrder 支持,或任何旨在确保测试方法按特定顺序运行的测试框架功能。但请注意,如果整个测试类是并行运行的,则此规则不适用。
  • 更改共享服务或系统的状态,例如数据库、消息代理、文件系统等。这既适用于嵌入式系统,也适用于外部系统。
提示

如果并行测试执行失败,并出现异常提示当前测试的 ApplicationContext 不再有效,这通常意味着该 ApplicationContext 已在另一个线程中被从 ContextCache 中移除。

这可能是由于使用了 @DirtiesContext,或者是由于自动从 ContextCache 中清除所致。如果是由于 @DirtiesContext 导致的,那么你需要找到一种方法来避免使用它,或者将这些测试排除在并行执行之外。如果 ContextCache 的最大容量被超过了,你可以增加缓存的最大容量。详情请参见 上下文缓存 的讨论。

注意

在Spring TestContext框架中,只有当底层的TestContext实现提供了拷贝构造函数时,才能执行并行测试,这一点可以在TestContext的javadoc中找到说明。Spring中使用的DefaultTestContext就提供了这样的构造函数。然而,如果您使用的是第三方库,而该库提供了自定义的TestContext实现,那么您需要确认它是否适合并行测试执行。