iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
AI & Data

AI 營養師 + Web3 數位健康護照系列 第 12

Day12. 單元測試 (Unit Test),讓每個功能安心上路。

  • 分享至 

  • xImage
  •  

前幾天在 Hugging Face 上實作的 AI 營養顧問,目的是為了快速部署並驗證核心概念,當時是將所有程式碼都整合在單一的 app.py 檔案裡,算是一個典型的單體式(monolithic)應用程式

這個架構在原型開發階段效率極高,但隨著功能愈加愈多之後,這份「單一檔案」的程式碼將變得越來越難以維護與擴充。再加上,這種開發方式繞過單元測試,很容易埋下 bug 地雷,修正時會浪費更多時間,甚至需要更多的依賴單元反覆修改。

本日重點

  • 什麼是單元測試(Unit Test),核心概念與重要性說明
  • 建立單元測試的時機與原則
  • 主流測試框架介紹(pytest、unittest),比較差異與優劣
  • 撰寫測試案例、執行與診斷錯誤的步驟教學
  • 單元測試在 CI/CD、專案品質保障上的角色

一、認識單元測試(Unit Test)

單元測試是一種軟體測試方法,專門用來檢查程式中最小單元(通常是函式或方法)的正確性。在開發軟體時,開發人員會寫一段額外的程式(測試程式),自動化地呼叫這個功能單元,然後驗證它的輸出是否如預期。

1. 單元測試的基本概念

  • 範圍小:每次只測試一個功能區塊,如一個函數或方法。
  • 獨立性強:測試時會儘量與其他系統部分隔離,不依賴資料庫、網路等外部資源。
  • 可自動化:由程式來自動檢查結果是否正確。

2. 為什麼要寫單元測試?

  • 保證品質:可以及早發現錯誤,避免 bug 滲透到後面的開發階段。
  • 維護方便:只要有完整的單元測試,修改原本程式碼的時候,就能即時知道是否會影響到原有功能。
  • 提升信心:自動化的單元測試讓開發者更有信心地重構或優化程式。

簡單的說,單元測試就像是在開發階段時設下「防護的天羅地網」,讓人可以放心調整、增加或重構功能,也能幫助團隊合作時減少踩雷的風險。

3. 單元測試的最佳撰寫時機

在軟體開發的早期階段,或是開發過程中,就應該開始撰寫單元測試(養成「先寫測試,後寫功能」的習慣)。


二、單元測試怎麼寫?

在 Python 世界中,單元測試是保障專案品質的基石。最常用的兩種測試框架就是 unittest 和 pytest。unittest 設計較嚴謹且古典,pytest 則以極簡語法和高度自動化廣受歡迎。

1. 認識 pytest & unitest

項目 pytest unittest
語法寫法 極簡、無需class,函式+assert就行 需繼承TestCase,寫setUp/tearDown
執行命令 pytest 測試檔案.py python -m unittest 檔案.py
常用功能 自動收斂 test_開頭函式,詳細錯誤報告 需手動寫測試集/更繁瑣
資源隔離/Mocking 建議用pytest fixture,彈性高 依賴unittest.mock,結構較死板
擴充性 許多第三方插件(如pytest-cov, pytest-mock) 擴充和插件較少
社群現況 現代Python主流,社群支持活躍 標準庫、較多舊專案

2. 最基本的 pytest 例子(執行方法:pytest 檔名.py

# 以 pytest 為例
def add(x, y):
    return x + y

# 函式命名規則:test_開頭
def test_add():
    assert add(3, 4) == 7

3. 完整實作

  • 可參考(有單元測試的實作過程)

Day23. Flask 與資料庫整合 Ep2:用 SQLite 實作留言板功能


三、TDD 測試驅動開發

可參考:


四、延伸閱讀


上一篇
Day11. 嘔心瀝血寫的程式碼,卻是別人眼中的亂碼?快用 VS Code 幫它穿上專業戰袍!
下一篇
Day13. 用 Flask 規劃 AI 營養顧問的專案架構 Ep .1:建立第一個 Flask 應用程式
系列文
AI 營養師 + Web3 數位健康護照35
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言