@ContextConfiguration
@ContextConfiguration 是 Spring Test 框架 提供的注解,用来告诉测试类 “Spring 容器启动时去哪里拿配置”。
没有它,测试就跑在 纯 JVM 里;加上它,测试就跑在 Spring 上下文(ApplicationContext) 里,可以 @Autowired 直接注入 Bean。
一、放在哪儿
@RunWith(SpringRunner.class) // JUnit 4 写法
// 或 @ExtendWith(SpringExtension.class) // JUnit 5 写法
@ContextConfiguration(...)
public class XxxServiceTest { … }
二、三种常见“拿配置”方式
-
XML 文件
@ContextConfiguration(locations = "classpath:beans.xml")
-
Java Config 类
@ContextConfiguration(classes = AppConfig.class)
-
默认策略(推荐 Spring Boot)
@SpringBootTest // 已经组合了 @ContextConfiguration,自动找 @SpringBootApplication
三、还能干什么
属性 | 示例 | 说明 |
---|---|---|
locations | "classpath:dao.xml" | 加载 XML |
classes | AppConfig.class | 加载 @Configuration 类 |
initializers | MyInitializer.class | 自定义 ApplicationContextInitializer |
inheritLocations | false | 子测试类是否继承父类的配置 |
四、完整示例(JUnit 5)
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {ServiceConfig.class, DaoConfig.class})
@Transactional
class UserServiceTest {@Autowiredprivate UserService userService;@Testvoid createUser() {userService.create("Tom");assertEquals(1, userService.count());}
}
一句话总结
@ContextConfiguration
就是 Spring 测试的“启动入口” ——告诉测试框架:“用这些 XML 或 Java 配置去创建 Spring 容器,然后再跑我的测试。”