home / skills / kevintsengtw / dotnet-testing-agent-skills / dotnet-testing

dotnet-testing skill

/skills/dotnet-testing

This skill helps you quickly identify and load the most suitable dotnet-testing subskills to guide your .NET testing journey.

npx playbooks add skill kevintsengtw/dotnet-testing-agent-skills --skill dotnet-testing

Review the files below or copy the command above to add this skill to your agents.

Files (5)
SKILL.md
10.5 KB
---
name: dotnet-testing
description: |
  .NET 測試基礎技能總覽與引導中心。當使用者詢問「如何寫 .NET 測試」、「.NET 測試入門」、「需要哪些測試工具」、「測試最佳實踐」、「從零開始學測試」等一般性測試需求時觸發。會根據具體需求推薦適合的子技能組合,涵蓋測試基礎、測試資料、斷言、模擬、特殊場景等 19 個基礎技能。
  Keywords: dotnet testing, .NET 測試, 測試入門, 如何寫測試, 測試最佳實踐, unit test, 單元測試, xunit, 3A pattern, FIRST 原則, assertion, 斷言, mock, stub, NSubstitute, test data, AutoFixture, Bogus, validator, FluentValidation, TimeProvider, IFileSystem, code coverage, ITestOutputHelper, test naming
license: MIT
metadata:
  author: Kevin Tseng
  version: "1.0.0"
  tags: ".NET, testing, xUnit, overview, guide, fundamentals"
  related_skills: "dotnet-testing-advanced"
  skill_count: 19
  skill_type: "overview"
---

# .NET 測試基礎技能總覽

---

## 🤖 AI Agent 重要提示

**當您(AI Agent)被載入此入口 skill 時,請先閱讀以下指引**:

### 📋 本技能的定位

本檔案是「導航中心」,用於幫助找到正確的**子技能**。

#### 您的任務是

1. ✅ 根據使用者需求匹配對應的子技能
2. ✅ 使用 `Skill` tool 載入具體的子技能
3. ✅ 讓子技能提供專業的測試指引

#### 禁止行為

- ❌ 不要在本入口 skill 中直接提供測試程式碼
- ❌ 不要在沒有載入子技能的情況下開始實作測試
- ❌ 不要跳過子技能直接提供「一般性」測試建議

---

## 🎯 快速技能對照表(AI Agent 必讀)

**使用者提到的關鍵字 → 應載入的子技能**

### 最常用技能(必須熟記)

| 使用者說... | 載入指令 | 用途說明 |
|------------|----------|----------|
| **Validator**、驗證器、CreateUserValidator | `/skill dotnet-testing-fluentvalidation-testing` | FluentValidation 測試 |
| **Mock**、模擬、IRepository、IService | `/skill dotnet-testing-nsubstitute-mocking` | 模擬外部依賴 |
| **AutoFixture**、測試資料生成 | `/skill dotnet-testing-autofixture-basics` | 自動產生測試資料 |
| **斷言**、Should()、BeEquivalentTo | `/skill dotnet-testing-awesome-assertions-guide` | 流暢斷言(必學) |
| **DateTime**、時間測試、TimeProvider | `/skill dotnet-testing-datetime-testing-timeprovider` | 時間相關測試 |
| **File**、檔案系統、IFileSystem | `/skill dotnet-testing-filesystem-testing-abstractions` | 檔案系統測試 |
| **Bogus**、假資料、Faker | `/skill dotnet-testing-bogus-fake-data` | 擬真資料生成 |
| **Builder Pattern**、WithXxx | `/skill dotnet-testing-test-data-builder-pattern` | Test Data Builder |
| **深層比對**、DTO 比對、Excluding | `/skill dotnet-testing-complex-object-comparison` | 複雜物件比對 |

### 基礎入門技能

| 使用者說... | 載入指令 | 用途說明 |
|------------|----------|----------|
| **從零開始**、測試基礎、FIRST 原則 | `/skill dotnet-testing-unit-test-fundamentals` | 單元測試基礎 |
| **測試命名**、如何命名測試 | `/skill dotnet-testing-test-naming-conventions` | 命名規範 |
| **建立測試專案**、xUnit 設定 | `/skill dotnet-testing-xunit-project-setup` | 專案建置 |

### 進階技能組合

| 使用者說... | 載入指令 | 用途說明 |
|------------|----------|----------|
| AutoFixture + Bogus | `/skill dotnet-testing-autofixture-bogus-integration` | 自動化+擬真資料 |
| AutoFixture + NSubstitute | `/skill dotnet-testing-autofixture-nsubstitute-integration` | 自動建立 Mock |
| AutoData、Theory 測試 | `/skill dotnet-testing-autodata-xunit-integration` | 參數化測試 |
| 測試輸出、ITestOutputHelper | `/skill dotnet-testing-test-output-logging` | 測試日誌 |
| 覆蓋率、Coverlet | `/skill dotnet-testing-code-coverage-analysis` | 程式碼覆蓋率 |

---

## ⚠️ 使用流程範例

### ✅ 正確流程

```
使用者:請幫我建立 CreateUserValidator 的測試

AI:我注意到您需要測試 Validator。根據快速對照表,
    我應該載入 dotnet-testing-fluentvalidation-testing skill。

    [使用 Skill tool 載入子技能]

AI:現在按照 FluentValidation Testing skill 的指引為您建立測試...
```

### ❌ 錯誤流程

```
使用者:請幫我建立 CreateUserValidator 的測試

AI:好的,我來寫測試...(直接開始寫程式碼,沒有載入子技能)
```

---

## 📚 完整技能清單

如需查看完整的 19 個基礎技能清單、詳細決策樹、學習路徑建議,請繼續閱讀本檔案後續內容。

**人類開發者參考**:如需快速查找,請查看 [SKILLS_QUICK_INDEX.md](/SKILLS_QUICK_INDEX.md)

---

## 適用情境

當您遇到以下情況時,我會協助您找到正確的技能:

- 剛開始學習 .NET 測試,不知從何下手
- 想為現有專案建立測試,需要完整指引
- 需要改善測試品質,尋找最佳實踐
- 遇到特定測試場景,不確定該用哪個工具
- 想了解測試資料生成、斷言、模擬等技術
- 希望提升測試可讀性與維護性
- 需要處理時間、檔案系統等特殊測試場景

## 快速決策樹

### 我應該從哪裡開始?

#### 情境 1:完全新手,從未寫過測試

**推薦學習路徑**:
1. `dotnet-testing-unit-test-fundamentals` - 理解 FIRST 原則與 3A Pattern
2. `dotnet-testing-test-naming-conventions` - 學習命名規範
3. `dotnet-testing-xunit-project-setup` - 建立第一個測試專案

**為什麼這樣學**:
- FIRST 原則是所有測試的基礎,先建立正確的觀念
- 命名規範讓測試易讀易維護
- 實際動手建立專案,將理論轉化為實踐

---

#### 情境 2:會寫基礎測試,但測試資料準備很麻煩

**推薦技能(擇一或組合)**:

**選項 A - 自動化優先**
→ `dotnet-testing-autofixture-basics`
適合:需要大量測試資料、減少樣板程式碼

**選項 B - 擬真資料優先**
→ `dotnet-testing-bogus-fake-data`
適合:需要真實感的測試資料(姓名、地址、Email 等)

**選項 C - 語意清晰優先**
→ `dotnet-testing-test-data-builder-pattern`
適合:需要高可讀性、明確表達測試意圖

**選項 D - 兩者兼具**
→ `dotnet-testing-autofixture-basics` + `dotnet-testing-autofixture-bogus-integration`
適合:同時需要自動化和擬真資料

---

#### 情境 3:有外部依賴(資料庫、API、第三方服務)需要模擬

**推薦技能組合**:
1. `dotnet-testing-nsubstitute-mocking` - NSubstitute Mock 框架基礎
2. `dotnet-testing-autofixture-nsubstitute-integration` - (可選)整合 AutoFixture 與 NSubstitute

**何時需要第二個技能**:
- 如果您已經在使用 AutoFixture 產生測試資料
- 想要自動建立 Mock 物件,減少手動設定

---

#### 情境 4:測試中有特殊場景

**時間相關測試**
→ `dotnet-testing-datetime-testing-timeprovider`
處理:DateTime.Now、時區轉換、時間計算

**檔案系統測試**
→ `dotnet-testing-filesystem-testing-abstractions`
處理:檔案讀寫、目錄操作、路徑處理

**私有/內部成員測試**
→ `dotnet-testing-private-internal-testing`
處理:需要測試 private、internal 成員(但應謹慎使用)

---

#### 情境 5:需要更好的斷言方式

**基礎需求 - 流暢斷言**
→ `dotnet-testing-awesome-assertions-guide`
所有專案都應該使用,提升測試可讀性

**進階需求 - 複雜物件比較**
→ `dotnet-testing-complex-object-comparison`
處理:深層物件比較、DTO 驗證、Entity 比對

**驗證規則測試**
→ `dotnet-testing-fluentvalidation-testing`
處理:測試 FluentValidation 驗證器

---

#### 情境 6:想了解測試覆蓋率

→ `dotnet-testing-code-coverage-analysis`
學習:使用 Coverlet 分析程式碼覆蓋率、產生報告

## 技能分類地圖

將 19 個基礎技能分為 7 大類別(測試基礎、測試資料生成、測試替身、斷言驗證、特殊場景、測試度量、框架整合),每類包含技能對照表、學習路徑與程式碼範例。

> 📖 詳細內容請參閱 [references/skill-classification-map.md](references/skill-classification-map.md)

## 常見任務映射表

提供 7 個常見測試任務(從零建專案、服務依賴測試、時間邏輯測試等)的技能組合推薦、實施步驟與提示詞範例。

> 📖 詳細內容請參閱 [references/task-mapping-table.md](references/task-mapping-table.md)

## 學習路徑建議

規劃新手路徑(1-2 週)與進階路徑(2-3 週)的每日學習計畫,包含技能、學習重點與實作練習。

> 📖 詳細內容請參閱 [references/learning-paths.md](references/learning-paths.md)

## 引導對話範例

展示 AI 如何與您互動,幫助您選擇正確的技能,包含新手入門、處理依賴、特定問題、改善測試等 4 個常見對話場景。

> 📖 詳細內容請參閱 [references/conversation-examples.md](references/conversation-examples.md)

## 與進階技能的關係

完成基礎技能後,如果您需要進行整合測試、API 測試、容器化測試或微服務測試,請參考:

**進階整合測試** → `dotnet-testing-advanced`
- ASP.NET Core 整合測試
- 容器化測試(Testcontainers)
- 微服務測試(.NET Aspire)
- 測試框架升級與遷移

## 相關資源

### 原始資料來源

- **iThome 鐵人賽系列文章**:[老派軟體工程師的測試修練 - 30 天挑戰](https://ithelp.ithome.com.tw/users/20066083/ironman/8276)
  🏆 2025 iThome 鐵人賽 Software Development 組冠軍

- **完整範例程式碼**:[30Days_in_Testing_Samples](https://github.com/kevintsengtw/30Days_in_Testing_Samples)
  包含所有範例專案的可執行程式碼

### 學習文檔

本技能集基於以下完整教材提煉而成:

- **Agent Skills:從架構設計到實戰應用** (docs/Agent_Skills_Mastery.pdf)
  完整涵蓋 Agent Skills 從理論到實踐

- **Claude Code Skills: 讓 AI 變身專業工匠** (docs/Agent_Skills_Architecture.pdf)
  深入解析 Agent Skills 的架構設計

- **.NET Testing:寫得更好、跑得更快** (docs/NET_Testing_Write_Better_Run_Faster.pdf)
  測試執行優化與除錯技巧

## 下一步

選擇符合您需求的技能開始學習,或告訴我您的具體情況,我會推薦最適合的學習路徑!

**快速開始**:
- 新手 → 從 `dotnet-testing-unit-test-fundamentals` 開始
- 有經驗 → 告訴我您遇到的具體問題
- 不確定 → 告訴我您的專案情況,我會幫您分析

Overview

This skill is a .NET testing gateway that helps you find the right sub-skill and learning path for writing effective tests. It maps common questions (how to write tests, tooling, best practices, getting started) to focused sub-skills covering fundamentals, test data, assertions, mocking, and special scenarios. Use it to get a tailored recommendation before loading detailed guidance or sample code.

How this skill works

When you describe your testing need, the skill matches keywords to the appropriate sub-skill and recommends a sequence of steps. It instructs the agent to load the chosen sub-skill via the Skill tool and delegates concrete test guidance to that sub-skill. The gateway keeps guidance high-level and prevents directly producing test code until the specific sub-skill is loaded.

When to use it

  • You are a beginner asking how to start writing .NET tests
  • You need recommendations for test tools and when to use them (AutoFixture, Bogus, NSubstitute, xUnit)
  • You want a learning path or skill combination for a specific problem (time testing, filesystem, validators)
  • You need to improve test quality or test naming and conventions
  • You have a concrete testing scenario and want the right sub-skill to handle it

Best practices

  • Always identify the specific testing concern first (data, mock, assertion, time, IO) before asking for code
  • Follow the recommended sub-skill sequence: fundamentals → naming → project setup → tool integrations
  • Avoid writing tests or sharing code until the correct sub-skill is loaded to ensure focused, consistent guidance
  • Combine complementary skills (e.g., AutoFixture + Bogus, AutoFixture + NSubstitute) for scalable test setups
  • Prefer fluent assertions and clear test naming to maximize readability and maintainability

Example use cases

  • New developer: guided path from unit-test fundamentals to xUnit project setup
  • Service with external dependencies: recommend NSubstitute and AutoFixture-NSubstitute integration
  • Complex DTO comparisons: recommend the complex object comparison and fluent assertions sub-skills
  • Time-dependent logic: point to TimeProvider testing skill for deterministic time control
  • Validator testing: load FluentValidation testing skill for focused validator unit tests

FAQ

Can this skill produce test code directly?

No. This gateway does not emit test code itself. It identifies and loads the appropriate sub-skill which then provides concrete examples and code guidance.

How do I start if I don’t know which tool to use?

Describe your scenario (what you need to test and current pain points). The skill will recommend a learning path and one or more sub-skills to load for detailed help.