You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为多个测试类仅初始化一次Spring应用上下文

这问题我太熟了!要让多个测试类共享同一个Spring应用上下文、不用重复加那些注解,最省心的办法就是用抽象基类统一管理配置,另外如果是Spring Boot项目还有更简洁的写法,下面给你一步步讲:

方法一:通用抽象基类(适配JUnit 4/5)

先搞一个抽象的基础测试类,把所有需要的Spring相关注解都堆在这个基类上,然后让你的Test_1和Test_2继承它就行。Spring本身会自动缓存上下文,只要上下文的配置参数一致,就只会初始化一次,所有子类直接共享。

示例代码

首先是抽象基类:

// JUnit 4用@RunWith(SpringRunner.class),JUnit 5换成@ExtendWith(SpringExtension.class)
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {Config.class})
public abstract class BaseSpringTest {
    // 把共享的依赖放在这里,子类可以直接用,不用重复@Autowired
    @Autowired
    protected Gson gson;
}

然后你的测试类就能大幅简化:

public class Test_1 extends BaseSpringTest {
    @Test
    public void test_1_1 () {
        assertNotNull(gson);
    }
}
public class Test_2 extends BaseSpringTest {
    @Test
    public void test_2_1 () {
        assertNotNull(gson);
    }
}

方法二:Spring Boot项目专属简化

如果你的项目是Spring Boot,直接用@SpringBootTest注解就行——它已经内置了Spring上下文的扩展支持,而且同样会自动缓存上下文。基类可以写成这样:

// 可以指定配置类,也可以不指定(默认自动扫描主启动类)
@SpringBootTest(classes = {Config.class})
public abstract class BaseSpringBootTest {
    @Autowired
    protected Gson gson;
}

测试类同样继承这个基类就好,连@RunWith或者@ExtendWith都不用额外加,Spring Boot帮你搞定了。

额外提醒

只要你的测试类使用的上下文配置完全一致(比如@ContextConfiguration或@SpringBootTest的参数没差别),Spring就只会初始化一次上下文,不管有多少个测试类继承基类,都不用重复启动,既省时间又避免冗余代码。

内容的提问来源于stack exchange,提问作者pvjhs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:56:30