Junit5知识笔记
与之前的版本不同: Junit5由三个不同的子项目构成 JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
-
JUnit Platform:是基于JVM的运行测试的基础框架在,它定义了开发运行在这个测试框架上的TestEngine API。此外该平台提供了一个控制台启动器,可以从命令行启动平台,可以为Gradle和 Maven构建插件, 同时提供基于JUnit 4的Runner。
-
JUnit Jupiter:是在JUnit 5中编写测试和扩展的新编程模型和扩展模型的组合.Jupiter子项目提供了一个TestEngine在平台上运行基于Jupiter的测试。
-
JUnit Vintage:提供了一个TestEngine在平台上运行基于JUnit 3和JUnit 4的测试。
一、注解:
* @BeforeAll 只执行一次,执行时机是在所有测试和 @BeforeEach 注解方法之前
* @BeforeEach 在每个测试执行之前执行
* @AfterEach 在每个测试执行之后执行
* @AfterAll 只执行一次,执行时机是在所有测试和 @AfterEach 注解方法之后
* @ParameterizedTest 表示该方法是一个参数化测试
* @DisplayName 为测试类或测试方法声明一个自定义的显示名称
* @Disable 用于禁用方法
* @Tag 用于声明过滤测试的tag标签,该注解可以用在方法或类上
* @CsvSource 多参数测试
* @MethodSource 多参数测试,
因为框架会为每个测试创建一个单独的实例,在 @BeforeAll/@AfterAll 方法执行时尚无任何测试实例诞生。因此,这两个方法必须定义为静态方法。
二、对比junit4:
Junit4 | Junit5 |
---|---|
@Test | @Test |
@BeforeClass | @BeforeAll |
@AfterClass | @AfterAll |
@Before | @BeforeEach |
@After | @AfterEach |
@Ignore | @Disabled |
@Category | @Tag |
三、套件测试
1、@SelectPackages指定通过@RunWith(JUnitPlatform.class)运行测试套件时要选择的包的名称。指定单个包, 将packageName作为参数传递给@SelectPackages注解
- 单个包示例
- 多个包示例
- 使用@SelectClasses创建测试套件
- @SelectClasses指定通过@RunWith(JUnitPlatform.class)运行测试套件时要选择的类。指定单个类,将ClassName.class作为参数传递到@SelectClasses注解。
3、@IncludePackages和@ExcludePackages
- 我们了解到@SelectPackages也会导致其所有子包都被扫描以查找测试类。 如果要排除任何特定的子包,或包括任何包,则可以使用 @IncludePackages和@ExcludePackages注解
4、@IncludeTags和@ExcludeTags
- 在企业应用中,您可能已经标记了要在特定环境中运行的测试用例,例如开发或生产。 您还可以在测试套件中包含或排除基于这些标记的测试。
@IncludeTags 示例
四、 参数化测试
-
@ValueSource
-
@EnumSource
-
@MethodSource
-
@CsvSource
-
@CsvFileSource
-
@ArgumentsSource