在 不同版本的 Spring Boot 中,单元测试的注解略有变化,主要体现在 JUnit 版本的升级 和 Spring Test 相关注解的演变。下面是各个版本的 测试注解对比:
✅ 1. Spring Boot 1.x(JUnit 4)
Spring Boot 1.x 主要基于 JUnit 4,测试类通常使用:
@RunWith(SpringRunner.class)
👉 指定 JUnit 运行器@SpringBootTest
👉 加载完整的 Spring Boot 上下文@Test
👉 JUnit 4 的测试方法标记
📌 示例代码
@RunWith(SpringRunner.class) // 指定 Spring 测试运行器
@SpringBootTest // 加载 Spring Boot 上下文
public class VoucherOrderServiceTest {
@Test
public void testCreateVoucherOrder() {
System.out.println("测试 Spring Boot 1.x");
}
}
✅ 2. Spring Boot 2.x(JUnit 5)
Spring Boot 2.x 默认支持 JUnit 5,其中:
- JUnit 5 取代了 JUnit 4 的
@RunWith
,用@ExtendWith(SpringExtension.class)
替代 @SpringBootTest
仍然可用@Test
改用 JUnit 5 版本(org.junit.jupiter.api.Test
)
📌 示例代码
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class) // 取代 JUnit 4 的 @RunWith
@SpringBootTest // 加载 Spring Boot 上下文
public class VoucherOrderServiceTest {
@Test
void testCreateVoucherOrder() {
System.out.println("测试 Spring Boot 2.x");
}
}
✅ 3. Spring Boot 3.x(JUnit 5)
Spring Boot 3.x 仍然使用 JUnit 5,和 2.x 基本一致:
@ExtendWith(SpringExtension.class)
依然适用,但可以省略(Spring Boot 3.x 默认使用 JUnit 5)
📌 示例代码
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest // 直接使用,不需要 @ExtendWith
public class VoucherOrderServiceTest {
@Test
void testCreateVoucherOrder() {
System.out.println("测试 Spring Boot 3.x");
}
}
📌 总结:Spring Boot 各版本测试注解对比
Spring Boot 版本 | JUnit 版本 | 测试注解 |
---|---|---|
1.x | JUnit 4 | @RunWith(SpringRunner.class) 、@SpringBootTest 、@Test |
2.x | JUnit 5 | @ExtendWith(SpringExtension.class) (代替 @RunWith )、@SpringBootTest 、@Test |
3.x | JUnit 5 | @SpringBootTest (无需 @ExtendWith )、@Test |
✅ 选择最佳实践
- 如果你使用 Spring Boot 2.x 或 3.x,推荐 JUnit 5(更现代)
🚀 建议:Spring Boot 3.x 直接使用 JUnit 5,不需要 @ExtendWith(SpringExtension.class)
!