csharp-nunit

csharp-nunit

熱門

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

3.6萬星標
4556分支
更新於 2026/7/13
SKILL.md
readonlyread-only
name
csharp-nunit
description

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

NUnit 最佳實務

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

專案設定

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

測試結構

  • 在測試類別上套用 [TestFixture] 屬性
  • 測試方法使用 [Test] 屬性
  • 遵循 Arrange-Act-Assert (AAA) 模式
  • 使用 MethodName_Scenario_ExpectedBehavior 模式命名測試
  • 使用 [SetUp][TearDown] 進行每個測試的設定與清理
  • 使用 [OneTimeSetUp][OneTimeTearDown] 進行每個類別的設定與清理
  • 使用 [SetUpFixture] 進行組件層級的設定與清理

標準測試

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

資料驅動測試

  • 使用 [TestCase] 提供內嵌測試資料
  • 使用 [TestCaseSource] 提供程式產生的測試資料
  • 使用 [Values] 提供簡單的參數組合
  • 使用 [ValueSource] 提供屬性或方法為基礎的資料來源
  • 使用 [Random] 提供隨機數值測試值
  • 使用 [Range] 提供連續數值測試值
  • 使用 [Combinatorial][Pairwise] 組合多個參數

判斷式

  • 使用 Assert.That 搭配條件約束模型(NUnit 偏好的風格)
  • 使用 Is.EqualToIs.SameAsContains.Item 等條件約束
  • 使用 Assert.AreEqual 進行簡單值相等判斷(傳統風格)
  • 使用 CollectionAssert 進行集合比較
  • 使用 StringAssert 進行字串專用判斷
  • 使用 Assert.Throws<T>Assert.ThrowsAsync<T> 測試例外狀況
  • 在判斷式中加入描述性訊息,以便失敗時清楚了解原因

模擬與隔離

  • 考慮搭配 NUnit 使用 Moq 或 NSubstitute
  • 模擬相依性以隔離被測試單元
  • 使用介面以便於模擬
  • 對於複雜的測試設定,考慮使用 DI 容器

測試組織

  • 依功能或元件分組測試
  • 使用 [Category("CategoryName")] 分類
  • 必要時使用 [Order] 控制測試執行順序
  • 使用 [Author("DeveloperName")] 標示擁有者
  • 使用 [Description] 提供額外的測試資訊
  • 考慮使用 [Explicit] 標記不應自動執行的測試
  • 使用 [Ignore("Reason")] 暫時跳過測試