Spring Framework 5.0 引入了对在 使用 Spring TestContext 框架时的单个 JVM。一般来说,这意味着大多数 测试类或测试方法可以并行运行,而无需对测试代码进行任何更改 或配置。

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

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

如果测试出现以下情况,请不要并行运行测试:

  • 使用 Spring Framework 的支持。@DirtiesContext

  • 使用 Spring Boot 或支持。@MockBean@SpyBean

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

  • 更改共享服务或系统(如数据库、消息代理、 文件系统等。这适用于嵌入式和外部系统。

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

这可能是由于使用了 或由于自动逐出 .如果是罪魁祸首,你要么需要找到一种方法来 避免使用此类测试或将此类测试排除在并行执行之外。如果 已超过最大尺寸,可以增加最大尺寸 的缓存。有关详细信息,请参阅有关上下文缓存的讨论。@DirtiesContextContextCache@DirtiesContext@DirtiesContextContextCache

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