Spring 启动测试 类 可以重用应用程序上下文以进行更快的测试 运行 吗?

Can Spring Boot test classes reuse application context for faster test run?

@ContextConfiguration 位置属性对 Spring 引导集成测试没有意义。是否有任何其他方法可以跨 @SpringBootTest 注释的多个测试 类 重用应用程序上下文?

是的。 Actually it is default behavior。 link 指向 Spring 框架文档,由 Spring Boot under the hood 使用。

顺便说一句,当 @ContextConfiguration 也被使用时,默认情况下也会重用上下文。

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

上面的注释表示已加载完整的上下文,并且在整个测试中使用相同的内容。这意味着它只加载一次。

Spring Boot 提供了一个@SpringBootTest 注解,当你需要Spring Boot 时,它可以用来替代标准的spring-test @ContextConfiguration 注解特征。注释通过 SpringApplication

创建测试中使用的 ApplicationContext 来工作

对于像我这样从 Google 着陆的人:

如果您的 Maven surefire 插件中有 <reuseFork>false</reuseFork>,您的上下文就不可能被重用,因为您实际上是在为每个测试生成一个新的 JVM class。

这在 Spring 文档中有详细记录:https://docs.spring.io/spring/docs/current/spring-framework-reference/testing.html#testcontext-ctx-management-caching

如果您从 Google 登陆这里并且在启动多个应用程序上下文时遇到问题,请注意:

确保在多次使用@SpringBootTests 时使用相同的属性。 例如。如果您有一项测试仅使用 @SpringBootTest,另一项测试仅使用 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT),每个测试都会启动自己的上下文!

最简单的方法是在每个集成测试中扩展 BaseIntegrationTest class 并将 @SpringBootTest 注释放在该基础 class 上,例如:

package com.example.demo;

import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public abstract class BaseIntegrationTest{
}