## 运行要求
* JDK 8 +
## JUnit5 简介
JUnit5与以前版本的 JUnit 不同,拆分成由三个不同子项目的几个不同模块组成:
* **JUnit Platform**: 用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持。
* **JUnit Jupiter**:包含 JUnit 5 新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码。
* **JUnit Vintage**:用于在JUnit 5 中兼容运行 JUnit3.x 和 JUnit4.x 的测试用例。
## 新特性
* 提供全新的断言和测试注解,支持测试类内嵌
* 更丰富的测试方式:支持动态测试,重复测试,参数化测试等
* 实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖
* 提供对 Java 8 的支持,如 Lambda 表达式等。
## maven依赖
```
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.x</version>
<scope>test</scope>
</dependency>
```
## 项目中的目录结构
项目目录必须是如下,测试类规定标准是在test目录中进行测试
```
├── src
│ ├── main
│ │ └── java
│ │ └── resources
│ └── test
│ │ └── java
│ │ └── resources
```
## 常用注解介绍
* @BeforeEach 和@AfterEach对应JUnit4的@Before 和@After。
* @BeforeAll 和@AfterAll对应JUnit4的@BeforeClass 和@AfterClass。
* @Disabled对应JUnit4的@Ignore 替换成。
* @Test 测试方法。
* @DisplayName 测试类或方法的显示名称。
* @Tag 为测试类或方法添加标签。
* @Order和@TestMethodOrder 指定测试方法顺序执行
* @RepeatedTest 指定测试方法重复执行N次
* @ExtendWith对应JUnit4的@RunWith。
## 常用断言介绍
断言的使用, 必须先引入必须的包,IDE创建的会自动引入
```
import static org.junit.jupiter.api.Assertions.*;
```
assertEquals(100, x): 断言相等
assertArrayEquals({1, 2, 3}, x): 断言数组相等
assertNull(x): 断言为null
assertTrue(x > 0): 断言为true
assertFalse(x < 0): 断言为false;
assertNotEquals: 断言不相等
assertNotNull: 断言不为null
assertThrows:断言抛出期望的异常
## 参数化测试
* maven依赖
```
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>5.x</version>
<scope>test</scope>
</dependency>
```
* @ParameterizedTest 作为参数化测试的必要注解,替代了 @Test 注解。
* @ValueSource 数据参数源,支持 Java 的八大基本类型和字符串。
* 示例:
```
public class ParameterizedUnitTest {
@ParameterizedTest
@ValueSource(ints = {2, 4, 8})
void testNumberShouldBeEven(int num) {
Assertions.assertEquals(0, num % 2);
}
@ParameterizedTest
@ValueSource(strings = {"Effective Java", "Code Complete", "Clean Code"})
void testPrintTitle(String title) {
System.out.println(title);
}
}
```
## JUnit4迁移指南
JUnit5 平台通过 Jupiter 引擎来运行 JUnit 5 测试,Vintage 引擎来运行 JUnit 3 和 JUnit 4 测试。因此,已有的 JUnit 3 和 4 的测试不需要任何修改就可以直接在 JUnit5 平台上运行。只需要确保项目中引入Vintage 引擎,JUnit5平台会自动发现并使用该引擎来运行 JUnit 3 和 4 测试。开发人员可以按照自己的项目安排来规划迁移到 JUnit 5 的进度。可以保持已有的 JUnit 3 和 4 的测试用例不变,而新增加的测试用例则使用 JUnit 5。
```
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>5.x</version>
<scope>test</scope>
</dependency>
```