JUnit 5(Jupiter)引入了许多新的注解,同时也保留了一些JUnit 4中的经典注解并赋予了新的功能。以下是JUnit 5中常用的注解及其用途:
-
@Test
标记一个测试方法,无需像JUnit 4那样指定expected或timeout属性(这些功能由其他注解替代)。@Test void testMethod() { // 测试逻辑 } -
@BeforeEach
在每个测试方法执行前运行,替代JUnit 4的@Before。@BeforeEach void setUp() { // 初始化操作 } -
@AfterEach
在每个测试方法执行后运行,替代JUnit 4的@After。@AfterEach void tearDown() { // 清理操作 } -
@BeforeAll
在所有测试方法执行前运行一次(方法必须为static),替代JUnit 4的@BeforeClass。@BeforeAll static void initAll() { // 全局初始化 } -
@AfterAll
在所有测试方法执行后运行一次(方法必须为static),替代JUnit 4的@AfterClass。@AfterAll static void tearDownAll() { // 全局清理 } -
@Disabled
禁用测试方法或测试类,替代JUnit 4的@Ignore。@Disabled("暂不执行,等待修复") @Test void disabledTest() { // 此测试不会执行 } -
@DisplayName
为测试类或方法指定自定义名称(支持空格、特殊字符和 emoji)。@DisplayName("用户服务测试") class UserServiceTest { @Test @DisplayName("验证用户登录功能") void testLogin() { // 测试逻辑 } } -
@Nested
标记嵌套测试类,用于分组相关测试,增强测试结构的可读性。class OuterTest { @Nested @DisplayName("当用户未登录时") class WhenUserNotLoggedIn { @Test void testAccessRestrictedResource() { // 测试逻辑 } } } -
@Tag
为测试方法或类添加标签,用于筛选执行特定测试(如按功能、优先级等)。@Tag("fast") @Test void quickTest() { ... } @Tag("slow") @Test void longRunningTest() { ... } -
@ParameterizedTest
标记参数化测试,结合@ValueSource等注解实现多组输入测试。@ParameterizedTest @ValueSource(strings = {"apple", "banana", "cherry"}) void testFruitLength(String fruit) { assertTrue(fruit.length() > 2); } -
@RepeatedTest
指定测试方法重复执行的次数。@RepeatedTest(5) // 重复执行5次 void repeatedTest() { // 测试逻辑 } -
@Timeout
设置测试方法的超时时间,超过则失败。@Test @Timeout(5) // 超时时间5秒 void testWithTimeout() throws InterruptedException { Thread.sleep(3000); // 正常执行 } -
@ExtendWith
注册扩展类,替代JUnit 4的@RunWith,用于扩展测试框架功能(如Spring的@SpringBootTest底层使用)。@ExtendWith(MockitoExtension.class) class ServiceTest { ... }
这些注解覆盖了测试生命周期管理、测试分组、参数化测试、重复执行等常见场景,是JUnit 5测试开发的基础。









网友评论