此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Framework 6.2.10spring-doc.cadn.net.cn

并行测试执行

Spring TestContext 框架为并行执行测试提供了基本支持 在单个 JVM 中。通常,这意味着大多数测试类或测试方法都可以 并行运行,无需对测试代码或配置进行任何更改。spring-doc.cadn.net.cn

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

请记住,在测试套件中引入并发可能会导致意外的副作用、奇怪的运行时行为以及间歇性失败的测试或看似随机的。因此,Spring 团队提供了以下一般准则对于何时不并行运行测试。spring-doc.cadn.net.cn

如果测试符合以下条件,请勿并行运行测试:spring-doc.cadn.net.cn

  • 使用 Spring Framework 的@DirtiesContext支持。spring-doc.cadn.net.cn

  • 使用 Spring Framework 的@MockitoBean@MockitoSpyBean支持。spring-doc.cadn.net.cn

  • 使用 Spring Boot 的@MockBean@SpyBean支持。spring-doc.cadn.net.cn

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

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

如果并行测试执行失败,并出现异常,指出ApplicationContext对于当前测试不再处于活动状态,这通常意味着ApplicationContext已从ContextCache在不同的线程中。spring-doc.cadn.net.cn

这可能是由于使用@DirtiesContext或由于自动逐出ContextCache. 如果@DirtiesContext是罪魁祸首,要么需要想办法避免使用@DirtiesContext或从并行执行中排除此类测试。如果最大大小ContextCache已超过,您可以增加最大大小缓存。有关详细信息,请参阅有关上下文缓存的讨论。spring-doc.cadn.net.cn

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