iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
自我挑戰組

學習C#續系列 第 27 篇

Day 27: 單元測試實戰(Unit Testing)

  • 分享至 

  • xImage
  •  

單元測試的本質與價值:
最小隔離單元:針對程式中的獨立方法(通常是核心業務邏輯)進行自動化驗證,不依賴外部資料庫、網路或實體檔案。
重構防護網:確保未來修改底層程式碼或擴充功能時,既有邏輯不會被意外破壞(防止 Regression 迴歸錯誤)。

xUnit 核心屬性與架構:
[Fact]:標準測試方法標記,代表此測試不帶參數、永遠預期特定行為。
[Theory] 與 [InlineData]:參數化測試(Data-Driven Test),同一個測試邏輯可注入多組不同的輸入值與預期輸出,大幅減少重複程式碼。
測試類別生命週期:xUnit 在執行每個測試方法時都會重新實體化測試類別(Constructor 等同於 Setup),確保各測試案例間狀態互不干擾。

AAA 三段式結構(Arrange-Act-Assert):
Arrange(安排/準備):建立物件、初始化變數、設定測試資料與依賴項。
Act(操作/執行):呼叫待測的核心方法,取得實際運算結果或狀態變更。
Assert(斷言/驗證):使用 Assert.Equal()、Assert.True()、Assert.Throws() 等方法驗證結果是否符合預期。

例外驗證(Exception Testing):
商業邏輯遇到非法輸入時應拋出例外,單元測試需使用 Assert.Throws(() => ...) 確認例外是否在正確的時機被觸發。


專案設定與套件安裝
在方案中建立一個獨立的測試專案(例如 EX.Tests):

  1. 在 Visual Studio 中:方案上按右鍵 -> 新增 -> 新增專案 -> 選擇 xUnit 測試專案 (.NET Core / .NET Framework)。
  2. 在測試專案的「參考」中,加入對主專案(被測試專案)的專案參考。
  3. NuGet 需包含:
    xunit (2.4.x 以上)
    xunit.runner.visualstudio (讓 VS 測試總管能偵測並執行測試)

實作範例
如何在 Visual Studio 中執行測試

  1. 在 Visual Studio 上方工具列點選 測試 (Test) -> 測試總管 (Test Explorer)。
    https://ithelp.ithome.com.tw/upload/images/20261010/20178925zrvJhc516m.png

https://ithelp.ithome.com.tw/upload/images/20261010/20178925QG8F5ZYgF4.png

  1. 點擊測試總管左上角的 全部執行 (Run All Tests) 按鈕(綠色雙箭頭)或按下快速鍵 Ctrl + R, A。
  2. 所有測試案例通過時會顯示綠色打勾標記(Passed);若 Assert 數值不符或未捕捉到預期例外,則會標記紅色叉號並顯示差異訊息。

一、被測試的核心商業邏輯(待測目標)
https://ithelp.ithome.com.tw/upload/images/20261010/201789254N2EyvI8dr.png

二、xUnit 測試案例實作
https://ithelp.ithome.com.tw/upload/images/20261010/20178925vjedHWR6p9.png

https://ithelp.ithome.com.tw/upload/images/20261010/20178925hsW5Z1gLaF.png

結果
https://ithelp.ithome.com.tw/upload/images/20261010/20178925D8GEPuKx9w.png


上一篇
Day 26: 物件導向設計原則(SOLID)與控制台架構思維
下一篇
Day 28: 綜合實作專案(一):Console 系統架構與選單設計
系列文
學習C#續 共 29 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言