1.Junit5注解
Junit Jupiter支持以下注释,
用于配置测试和扩展测试框架。
除非另有说明,
所有的核心注释都位于junit-jupiter-api模块中的
org.junit.jupiter.api包中。
序号 | 注解 | 说明 |
---|---|---|
1 | @Test | 表示方法是测试方法,与Junit4的@Test不同,不能声明任何属性,因为JUnit Jupiter中的测试扩展需要通过专用的注解。 |
2 | @ParameterizedTest | 表示方法是参数化测试。 |
3 | @RepeatedTest | 表示方法是可以按照指定次数重复执行。 |
4 | @TestFactory | 表示方法是动态测试的测试工厂。 |
5 | @TestTemplate | 表示方法是测试用例的模板,用于支持多次调用,调用的次数取决于调用上下文返回的注册提供者。 |
6 | @TestClassOrder | 用于@Nested注解的测试类,可以配置测试类执行顺序。 |
7 | @TestMethodOrder | 用于为测试类配置测试方法执行顺序;类似于Junit4的@FixMethodOrder。 |
8 | @TestInstance | 用于为测试类配置测试实例生命周期。 |
9 | @DisplayName | 为测试类或测试方法声明自定义的展示名称。 |
10 | @DisplayNameGeneration | 为测试类声明一个自定义的显示名称生成器。 |
11 | @BeforeEach | 表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之前执行;类似于Junit4的@Before 。即在每个单元测试之前执行,如果测试类有n个测试方法,则被执行n次。 |
12 | @AfterEach | 表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之后执行;类似于Junit4的@After 。即在每个单元测试之后执行,如果测试类有n个测试方法,则被执行n次。 |
13 | @BeforeAll | 表示方法应该在当前类中的所有@Test,@RepeatedTest,@ParameterizedTest和@TestFactory方法之前执行;类似于Junit 4的@BeforeClass。这样的方法是必须是静态的,如果配合test instance lifecycle(per-class)使用,可以是非静态的。方法只会执行一次。 |
14 | @AfterAll | 表示方法应该在当前类中的所有@Test,@RepeatedTest,@ParameterizedTest和@TestFactory方法之前执行;类似于Junit 4的@AfterClass。这样的方法是必须是静态的,如果配合test instance lifecycle(per-class)使用,可以是非静态的。方法只会执行一次。 |
15 | @Nested | 表示测试类是非静态的嵌套测试类。@BeforeAll和@AfterAll方法不能直接在@Nested测试类中使用,除非配合test instance lifecycle(per-class)使用。 |
16 | @Tag | 用于在类或方法上声明用于过滤测试的标签;类似于TestNG中的测试组或Junit 4中的Categories。 |
17 | @Disabled | 用于禁用一个测试类或测试方法;类似于JUnit 4的' @Ignore '。即执行单元测试时,会忽略对应的测试类或者测试方法。 |
18 | @Timeout | 用于测试方法、测试工厂、测试模板或生命周期方法,在其执行超过指定时间时失败。 |
19 | @ExtendWith | 用于以声明方式注册扩展。 |
20 | @RegisterExtension | 用于通过字段以编程方式注册扩展。 |
21 | @TempDir | 用于在生命周期方法或测试方法中通过字段注入或参数注入临时目录;位于org.junit.jupiter.api.io包。 |
另外还有一些注释,
目前是实验性的,
感兴趣的请参考实验API中的表格。
2.参数源注解
参数化测试使用@ParameterizedTest注解代替@Test,
可以使用不同的参数多次运行同一个测试方法。
但是必须至少声明一个参数源,
然后在测试方法中使用这些参数。
配合@ParameterizedTest使用的参数源注解如下:
序号 | 注解 | 说明 |
---|---|---|
1 | @ValueSource | 最简单的参数源。可以指定单个字面值数组,并且在参数化测试时提供单个参数。 |
2 | @NullSource | 为参数化测试方法提供一个空参数,不能用于具有基本类型的参数。 |
3 | @EmptySource | 为参数化测试方法提供一个空参数,用于以下类型的参数:java.lang.String, java.util.List, java.util.Set, java.util.Map, primitive arrays (比如 int[], char[][]等等), object arrays (比如String[], Integer[][]等等)。但是不支持这些类型的子类型。 |
4 | @NullAndEmptySource | 一个组合注释,结合了@NullSource和@EmptySource的功能。 |
5 | @EnumSource | 提供了一种使用枚举常量的方便方法。 |
6 | @MethodSource | 可以引用测试类或外部类的一个或多个工厂方法。 |
7 | @CsvSource | 可以用逗号分隔的值来表达参数列表(例如CSV字符串文字)。通过@CsvSource中的value属性提供的每个字符串表示一个CSV行,并导致对参数化测试的一次调用。 |
8 | @CsvFileSource | 使用类路径或本地文件系统中CSV文件(逗号分隔的)作为参数源,文件中的每一行都会导致对参数化测试的一次调用。 |
9 | @ArgumentsSource | 可以用来指定一个自定义的、可重用的ArgumentsProvider。注意ArgumentsProvider的实现必须声明为顶级类或静态嵌套类。 |
3.参考文章
该升级你的JUnit版本了——JUnit5基本介绍Spring Boot 集成 JUnit5,更优雅单元测试JUnit 5 User Guide