对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cn

并行测试执行

Spring Framework 5.0 引入了对在 单个 JVM。一般来说,这意味着大多数 测试类或测试方法可以并行运行,而无需对测试代码进行任何更改 或 configuration。spring-doc.cn

有关如何设置并行测试执行的详细信息,请参阅 测试框架、构建工具或 IDE。

请记住,将并发引入测试套件可能会导致 意外的副作用、奇怪的运行时行为以及间歇性失败的测试,或者 似乎是随机的。因此,Spring Team 提供了以下一般准则 for when 不并行运行测试。spring-doc.cn

如果测试符合以下条件,则不要并行运行测试:spring-doc.cn

  • 使用 Spring Framework 的支持。@DirtiesContextspring-doc.cn

  • 使用 Spring Boot 的 or 支持。@MockBean@SpyBeanspring-doc.cn

  • 使用 JUnit 4 的支持或任何测试框架功能 旨在确保测试方法按特定顺序运行。注意 但是,如果整个测试类并行运行,则这不适用。@FixMethodOrderspring-doc.cn

  • 更改共享服务或系统的状态,例如数据库、消息代理、 filesystem 等。这适用于嵌入式系统和外部系统。spring-doc.cn

如果并行测试执行失败,并出现异常,指出当前测试的 不再处于活动状态,这通常意味着 已从其他线程中删除。ApplicationContextApplicationContextContextCachespring-doc.cn

这可能是由于使用 或由于 自动驱逐 造成的。如果是罪魁祸首,您需要找到一种方法 避免使用此类测试或从并行执行中排除此类测试。如果 已超出 的最大大小,您可以增加最大大小 缓存中。有关详细信息,请参阅 context caching 上的讨论。@DirtiesContextContextCache@DirtiesContext@DirtiesContextContextCachespring-doc.cn

只有在以下情况下,才能在 Spring TestContext 框架中并行执行测试 底层实现提供了一个 Copy 构造函数,如 TestContext 的 javadoc。Spring 中使用的提供了这样的构造函数。但是,如果您使用 提供自定义实现的第三方库,您需要 验证它是否适合并行测试执行。TestContextDefaultTestContextTestContext