## 運行要求
* 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>
```