Junit5常用注解

2025-08-05  本文已影响0人  flyjar

JUnit 5(Jupiter)引入了许多新的注解,同时也保留了一些JUnit 4中的经典注解并赋予了新的功能。以下是JUnit 5中常用的注解及其用途:

  1. @Test
    标记一个测试方法,无需像JUnit 4那样指定expectedtimeout属性(这些功能由其他注解替代)。

    @Test
    void testMethod() {
        // 测试逻辑
    }
    
  2. @BeforeEach
    在每个测试方法执行前运行,替代JUnit 4的@Before

    @BeforeEach
    void setUp() {
        // 初始化操作
    }
    
  3. @AfterEach
    在每个测试方法执行后运行,替代JUnit 4的@After

    @AfterEach
    void tearDown() {
        // 清理操作
    }
    
  4. @BeforeAll
    在所有测试方法执行前运行一次(方法必须为static),替代JUnit 4的@BeforeClass

    @BeforeAll
    static void initAll() {
        // 全局初始化
    }
    
  5. @AfterAll
    在所有测试方法执行后运行一次(方法必须为static),替代JUnit 4的@AfterClass

    @AfterAll
    static void tearDownAll() {
        // 全局清理
    }
    
  6. @Disabled
    禁用测试方法或测试类,替代JUnit 4的@Ignore

    @Disabled("暂不执行,等待修复")
    @Test
    void disabledTest() {
        // 此测试不会执行
    }
    
  7. @DisplayName
    为测试类或方法指定自定义名称(支持空格、特殊字符和 emoji)。

    @DisplayName("用户服务测试")
    class UserServiceTest {
        @Test
        @DisplayName("验证用户登录功能")
        void testLogin() {
            // 测试逻辑
        }
    }
    
  8. @Nested
    标记嵌套测试类,用于分组相关测试,增强测试结构的可读性。

    class OuterTest {
        @Nested
        @DisplayName("当用户未登录时")
        class WhenUserNotLoggedIn {
            @Test
            void testAccessRestrictedResource() {
                // 测试逻辑
            }
        }
    }
    
  9. @Tag
    为测试方法或类添加标签,用于筛选执行特定测试(如按功能、优先级等)。

    @Tag("fast")
    @Test
    void quickTest() { ... }
    
    @Tag("slow")
    @Test
    void longRunningTest() { ... }
    
  10. @ParameterizedTest
    标记参数化测试,结合@ValueSource等注解实现多组输入测试。

    @ParameterizedTest
    @ValueSource(strings = {"apple", "banana", "cherry"})
    void testFruitLength(String fruit) {
        assertTrue(fruit.length() > 2);
    }
    
  11. @RepeatedTest
    指定测试方法重复执行的次数。

    @RepeatedTest(5) // 重复执行5次
    void repeatedTest() {
        // 测试逻辑
    }
    
  12. @Timeout
    设置测试方法的超时时间,超过则失败。

    @Test
    @Timeout(5) // 超时时间5秒
    void testWithTimeout() throws InterruptedException {
        Thread.sleep(3000); // 正常执行
    }
    
  13. @ExtendWith
    注册扩展类,替代JUnit 4的@RunWith,用于扩展测试框架功能(如Spring的@SpringBootTest底层使用)。

    @ExtendWith(MockitoExtension.class)
    class ServiceTest { ... }
    

这些注解覆盖了测试生命周期管理、测试分组、参数化测试、重复执行等常见场景,是JUnit 5测试开发的基础。

上一篇 下一篇

猜你喜欢

热点阅读