#不同版本下,单元测试的注解使用

发布于:2025-04-05 ⋅ 阅读:(28) ⋅ 点赞:(0)

不同版本的 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)