一、测试方法注解
注解 | 说明 |
---|
@Test | 标记一个方法为测试方法。 |
@RepeatedTest(n) | 标记方法为重复测试,执行 n 次,每次作为独立测试用例。 |
@ParameterizedTest | 标记参数化测试方法,需配合参数源注解(如 @ValueSource )使用。 |
@TestFactory | 标记动态测试工厂方法,返回 DynamicNode 集合(如 Stream<DynamicTest> )。 |
@TestTemplate | 标记测试模板方法,需配合 TestTemplateInvocationContextProvider 扩展使用。 |
二、生命周期与配置注解
注解 | 说明 |
---|
@BeforeAll | 所有测试方法前执行一次,标记的方法必须是 static 。 |
@AfterAll | 所有测试方法后执行一次,标记的方法必须是 static 。 |
@BeforeEach | 每个测试方法前执行。 |
@AfterEach | 每个测试方法后执行。 |
@TestInstance | 配置测试类的实例生命周期模式(如 PER_CLASS 或 PER_METHOD )。 |
@TestInstanceFactory | 自定义测试实例的创建方式(需实现 TestInstanceFactory 接口)。 |
三、参数化测试注解
注解 | 说明 |
---|
@ValueSource | 提供基本类型参数(如 ints = {1, 2} )。 |
@CsvSource | 提供 CSV 格式的参数(如 {"1,2,3", "4,5,9"} )。 |
@CsvFileSource | 从 CSV 文件加载参数(如 resources = "/test-data.csv" )。 |
@MethodSource | 从静态方法获取参数(如 method = "dataProvider" )。 |
@EnumSource | 从枚举类型获取参数(如 value = DayOfWeek.class )。 |
@NullSource | 提供 null 参数。 |
@EmptySource | 提供空值参数(如空字符串、空集合)。 |
@ArgumentsSource | 自定义参数源(需实现 ArgumentsProvider 接口)。 |
四、条件测试注解
注解 | 说明 |
---|
@Disabled | 禁用测试类或方法(可指定原因)。 |
@EnabledOnOs | 仅在指定操作系统上启用测试(如 OS.LINUX )。 |
@DisabledOnOs | 在指定操作系统上禁用测试。 |
@EnabledOnJre | 仅在指定 JRE 版本上启用测试(如 JRE.JAVA_17 )。 |
@DisabledOnJre | 在指定 JRE 版本上禁用测试。 |
@EnabledIfEnvironmentVariable | 当环境变量满足条件时启用测试(如 named = "ENV", matches = "CI" )。 |
@DisabledIfEnvironmentVariable | 当环境变量满足条件时禁用测试。 |
@EnabledIf | 自定义条件表达式启用测试(如 "1 == 1" )。 |
@DisabledIf | 自定义条件表达式禁用测试。 |
五、测试组织与显示
注解 | 说明 |
---|
@DisplayName | 自定义测试类或方法的显示名称(支持 Unicode 和空格)。 |
@Nested | 标记嵌套测试类,用于分层组织测试逻辑。 |
@Tag | 为测试类或方法添加标签,用于按标签过滤测试(如 @Tag("fast") )。 |
六、扩展与依赖注入
注解 | 说明 |
---|
@ExtendWith | 注册扩展类(如 @ExtendWith(MockitoExtension.class) )。 |
@RegisterExtension | 通过字段或静态方法注册扩展实例。 |
@TempDir | 自动创建和清理临时目录(字段类型为 Path 或 File )。 |
七、超时与性能测试
注解 | 说明 |
---|
@Timeout | 设置测试方法的最大执行时间(如 @Timeout(5) 单位秒)。 |
八、元注解与组合注解
注解 | 说明 |
---|
@Retention | 定义注解的保留策略(通常为 RUNTIME )。 |
@Target | 定义注解的应用目标(如 METHOD 、CLASS )。 |
九、其他实用注解
注解 | 说明 |
---|
@TestMethodOrder | 指定测试方法的执行顺序(如 MethodOrderer.OrderAnnotation.class )。 |
@Order | 为测试方法指定执行顺序(数值小的先执行)。 |
@IndicativeSentencesGeneration | 生成测试报告的指示性句子(通常结合 @DisplayName 使用)。 |
十、总结
以上是 JUnit 5 的核心注解及其用途。通过灵活组合这些注解,可以构建高效、可维护的测试代码,覆盖从基础单元测试到复杂集成测试的各种场景。更多高级用法可参考 JUnit 5 官方文档。