← ClaudeAtlas

generate-unit-testlisted

針對指定的 C# 類別或方法,自動���生 NUnit 單元測試骨架,包含 Arrange/Act/Assert 結構與 NSubstitute Mock 設定。
CloudyWing/ai-dotfiles · ★ 0 · Testing & QA · score 76
Install: claude install-skill CloudyWing/ai-dotfiles
# 產生 NUnit 單元測試骨架 依 `csharp-nunit` skill 規範,為指定的 C# 類別或方法產生完整的測試骨架。 ## 使用方式 ``` /generate-unit-test [類別名稱或 .cs 檔案路徑] ``` 若未傳入參數,詢問使用者要測試哪個類別。 ## 執行步驟 ### 1. 讀取目標類別 讀取指定的 `.cs` 檔案,識別: - 類別名稱與命名空間 - 建構函式參數(確認需要 Mock 的相依性) - 所有 `public` 方法(包含方法簽名、參數類型、回傳類型) - 是否有 `async` 方法 - 是否有 `IDisposable` ### 2. 確認測試專案位置 掃描以下位置,找到對應的測試專案: - `*.Tests/*.csproj` - `tests/**/*.csproj` - `[ProjectName].Tests/` 若找不到,詢問使用者測試專案路徑;若不存在,告知需先建立測試專案。 確認測試專案有引用以下 NuGet 套件: - `NUnit` - `NUnit3TestAdapter` - `NSubstitute` - `Microsoft.NET.Test.Sdk` ### 3. 產生測試類別骨架 依照以下規範產生: ```csharp using NSubstitute; using NUnit.Framework; namespace [對應的測試命名空間]; [TestFixture] public class [ClassName]Tests { private [ClassName] sut; private [IDependency1] dependency1; // ... 其餘相依性 [SetUp] public void SetUp() { dependency1 = Substitute.For<[IDependency1]>(); // ... 建立其餘 Mock sut = new [ClassName](dependency1); } [Test] public void [MethodName]_[Scenario]_[ExpectedBehavior]() { // Arrange // TODO: 設定輸入與 Mock 行為 // Act var result = sut.[MethodName](); // Assert Assert.That(result, Is.Not.Null); } // 非同步方法範本 [Test] public async Task [AsyncMethodName]_[Scenario]_[ExpectedBehavior]() { // Arrange // Act var result = await sut.[AsyncMethodName](); // Assert } } ``` **命名規則:** - 測試方法名稱:`[方法名稱]_[情境]_[預期結果]`(底線分隔三段式)。 - 測試類別名稱:`[被測試類別名稱]Te