---
# System prepended metadata

title: Java 單元測試 with JUnit
tags: [技術, 後端, Java]

---

# 📄 Java 單元測試 with JUnit
:::success
版本資訊
JDK: 21.0.4
IDE: IntelliJ IDEA 2024.2 (Community Edition)
Build system: Maven 4.0.0
Dependency: junit.jupiter 5.9.2
:::

## 結構
一個基本的 JUnit 單元測試，結構如下：
![image](https://hackmd.io/_uploads/HkqSNCAiJg.png)
1. 目錄結構:
這是一個標準的 Maven Java 專案結構，將測試程式放在  `src/test/java/org/example (最後兩層請替換成你的專案名稱)` 底下，Maven 就能夠自動識別對應的程式，而且 package 結構相同，易於新增/管理檔案。
2. import:
記得import `@Test` Annotation 和 `Assert` Utility 的函式庫。
3. `@Test` Annotation:
用來告訴 Maven 和 JUnit 這支 function 是個單元測試。
4. `Assert.assertEquals(expected, actual)`
**重頭戲**，測試項目本體。
範例中的測試目的是「檢查 `result` 變數是否等於字串"Hello world!"」，是的話就會通過測試。
這裡使用的 `assertEquals(expected, actual)` 傳入參數第一個是預期結果，第二個是實際數值。

## 結果
測試結果如下：
- **通過**
![image](https://hackmd.io/_uploads/ryyKkC0oJl.png)
![image](https://hackmd.io/_uploads/BktnkRAikx.png)
  - 綠色勾勾✅ + Tests passed
  - console 不會特別印出什麼訊息
- **失敗**
![image](https://hackmd.io/_uploads/BkXfgACiyg.png)
  - 黃色叉叉❌ + Tests failed
  - console 印出測試結果
- **Exception**
![image](https://hackmd.io/_uploads/BkcFlCAsyl.png)
  - 紅色驚嘆號❗+ Tests failed
  - console 印出 stack trace