Junit5=Junit Platform+Junit Jupiter+Junit Vintag
Junit Platform:用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持
Junit Jupiter:包含 JUnit 5 新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码
Junit Vintag:用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例
JUnit 5 这个版本,主要特性:
提供全新的断言和测试注解,支持测试类内嵌
更丰富的测试方式:支持动态测试,重复测试,参数化测试等
实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖
提供对 Java 8 +版本的支持,如 Lambda 表达式,Stream API等
Junit5于Junit4annotation的差异
JUnit4 | Junit5 | 说明 |
@Test | @Test | 标记方法为测试方法 |
@Before | @BeforeEach | 在每个测试执行之前执行 |
@After | @AfterEach | 在每个测试执行之后执行 |
@BeforeClass | @BeforeAll | 只执行一次,在所有测试和 @BeforeEach 注解方法之前 |
@AfterClass | @AfterAll | 只执行一次,在所有测试和 @AfterEach注解方法之后 |
@Ignore | @Disabled | 禁用执行测试 |
Junit5特有的annotation
Junit5 | 说明 |
@DisplayName | 用来定义一个测试类并指定用例在测试报告中的展示名称 |
@Nested | 内嵌测试类 |
@RepeatedTest | 重复性测试 |
下面写一些例子来更加直观的理解Junit5
下面写一些例子
除此之外,Junit5还提供了新的断言
org.junit.jupiter.api.Assertions 。许多断言方法接受 Lambda 表达式参数,在断言消息使用 Lambda 表达式的一个优点就是它是延迟计算的,如果消息构造开销很大,这样做一定程度上可以节省时间和资源
将一个方法内的多个断言进行分组,使用 assertAll 方法:
超时操作的测试 assertTimeoutPreemptively:
异常测试:assertThrows
JUnit 5 提供方法 Assertions#assertThrows(Class<T>, Executable) 来进行测试,第一个参数为异常类型,第二个为函数式接口参数,跟 Runnable 接口相似,不需要参数,也没有返回,并且支持 Lambda表达式方式使用
Junit5参数化测试
使用 JUnit 5 进行参数化测试,除了 junit-jupiter-engine 基础依赖之外,还需要另个模块依赖:junit-jupiter-params,其主要就是提供了编写参数化测试 API。
@ParameterizedTest 作为参数化测试的必要注解,替代了 @Test 注解。任何一个参数化测试方法都需要标记上该注解。
JUnit 5 提供数据参数源方式:
基本数据源测试: @ValueSourceCSV
数据源测试:@CsvSource
外部CSV文件路径:@CsvFileSource Enum
枚举类型传入:@EnumSource
可迭代对象 的方法:@MethodSource
空值来源 :@NullAndEmptySource(@NullSource、 @EmptySource)