一、JUnit 是啥鬼
JUnit 是一個 Java 專用的自動化測試框架。
根據chatgpt簡單來說,它是讓我用程式測我的程式的一個東西,就像我平常自己手動打指令測功能一樣,但現在電腦幫我自動測試,還能報告出來「哪些功能壞了」。
二、那它能幹嘛?
以我現在做的這個toy project 為例:
假設我每次改完程式,都得自己開 CLI、打幾十行指令來測:
這樣根本是a waste of time,而且還會出錯
用 JUnit 後我就可以:
功能: 自動化測試效果:
addStudent() 自動新增後驗證筆數增加
removeByName() 自動檢查該學生是否刪除
updateAgeByName() 自動檢查更新值正確
countStudents() 自動比對資料庫筆數
averageAge() 自動驗證平均值正確
As a result, 我不用再開 CLI 測,按一鍵,JUnit 幫我全部跑完、報告結果。
三、為什麼這麼重要
當我的程式從「toy program」進化成「product」後,
每次改一行程式,都可能讓別的功能壞掉。
在大專案中,Junit 的價值主要有:
功能: 實際價值:
快速驗證改動不壞原本功能 改完一個函式,不用重跑整個系統
團隊協作安全 每個人改不同部分,測試幫你防止互相踩壞功能
自動回歸測試(Regression Test) 改過的錯不會再出現
持續整合(CI/CD)基礎 JUnit 測試可以在 GitHub Actions、Jenkins、GitLab CI 自動執行
增加信任度 你可以跟別人保證:「這套系統的功能都有測過」
四、實際例子(完全generated by chatgpt)
假設你的專案成長到 20 個類別、3000 行程式。
你今天改了一行 updateAgeByName() 的 SQL 語法。
結果你不小心忘記 WHERE,整張表的年齡全變成 20。
如果有 JUnit:
你跑測試 → 馬上出錯
你知道是哪個方法壞了
修好後再次執行 → 全部綠燈 ✅
如果沒 JUnit:
你可能在幾天後才發現資料全壞了 😭
五、JUnit 在「大專案」裡的實際位置
一個專案在長大後,會變成這樣
src/
├── main/
│ └── java/
│ ├── Main.java
│ ├── StudentManager.java
│ └── SqliteStudentRepository.java
└── test/
└── java/
└── StudentManagerTest.java ← 這裡放 JUnit 測試
這樣一來:
主程式專心負責功能
測試程式專心負責驗證
每次在 GitHub push 時,GitHub Actions 自動執行測試
「只有全部通過,才允許 merge」
六、JUnit 的概念重點
概念 說明
Unit Test 測單一方法是否正常
Integration Test 測不同模組之間的互動(例如 StudentManager + SQLite)
Assertions 驗證預期值是否正確(assertEquals, assertTrue)
@BeforeEach / @AfterEach 每次測試前後的初始化與清理動作
Test Coverage 測試覆蓋率,代表你測到多少程式邏輯
七、最實際的效益(一句話總結(一樣generated by chatgpt))
沒有 JUnit,你永遠在「猜」你的程式有沒有壞。
有了 JUnit,你能「證明」你的程式是好的。