csharp-xunit

csharp-xunit

熱門

取得 XUnit 單元測試的最佳實務,包括資料驅動測試

3.6萬星標
0分支
更新於 2026/7/11
SKILL.md
readonlyread-only
name
csharp-xunit
description

取得 XUnit 單元測試的最佳實務,包括資料驅動測試

XUnit 最佳實務

您的目標是協助我使用 XUnit 撰寫有效的單元測試,涵蓋標準測試與資料驅動測試方法。

專案設定

  • 使用獨立的測試專案,命名慣例為 [ProjectName].Tests
  • 參考 Microsoft.NET.Test.Sdk、xunit 和 xunit.runner.visualstudio 套件
  • 建立與被測試類別對應的測試類別(例如 Calculator 對應 CalculatorTests
  • 使用 .NET SDK 測試命令:dotnet test 執行測試

測試結構

  • 不需要測試類別屬性(與 MSTest/NUnit 不同)
  • 使用 [Fact] 屬性進行簡單測試
  • 遵循 Arrange-Act-Assert (AAA) 模式
  • 使用 MethodName_Scenario_ExpectedBehavior 模式命名測試
  • 使用建構函式進行設定,使用 IDisposable.Dispose() 進行清除
  • 使用 IClassFixture<T> 在單一測試類別內共用上下文
  • 使用 ICollectionFixture<T> 在多個測試類別間共用上下文

標準測試

  • 測試應專注於單一行為
  • 避免在一個測試方法中測試多個行為
  • 使用能清楚表達意圖的斷言
  • 僅包含驗證測試案例所需的斷言
  • 測試應獨立且冪等(可任意順序執行)
  • 避免測試間的相依性

資料驅動測試

  • 使用 [Theory] 搭配資料來源屬性
  • 使用 [InlineData] 提供內聯測試資料
  • 使用 [MemberData] 提供方法為基礎的測試資料
  • 使用 [ClassData] 提供類別為基礎的測試資料
  • 實作 DataAttribute 建立自訂資料屬性
  • 在資料驅動測試中使用有意義的參數名稱

斷言

  • 使用 Assert.Equal 檢查值相等
  • 使用 Assert.Same 檢查參考相等
  • 使用 Assert.True/Assert.False 檢查布林條件
  • 使用 Assert.Contains/Assert.DoesNotContain 檢查集合
  • 使用 Assert.Matches/Assert.DoesNotMatch 檢查正規表示式模式
  • 使用 Assert.Throws<T>await Assert.ThrowsAsync<T> 測試例外
  • 使用 Fluent Assertions 函式庫讓斷言更具可讀性

Mock 與隔離

  • 考慮搭配 XUnit 使用 Moq 或 NSubstitute
  • Mock 相依性以隔離受測單元
  • 使用介面以便於 Mock
  • 考慮對複雜測試設定使用 DI 容器

測試組織

  • 依功能或元件分組測試
  • 使用 [Trait("Category", "CategoryName")] 進行分類
  • 使用集合固定裝置將共用相依性的測試分組
  • 考慮使用輸出協助程式(ITestOutputHelper)進行測試診斷
  • 使用 Skip = "reason" 在 Fact/Theory 屬性中有條件地跳過測試