code-testing-generator 是微軟開源的多語言單元測試生成 Agent,會先學習你的儲存庫慣例、再生成並驗證測試,實測任務完成率 92.1%、比原生 Copilot 的失敗率少 63%。 它支援 C#、Python、Go、TypeScript、JavaScript、Java、Rust 等 12 種語言,目前已可透過 GitHub Copilot CLI 與 VS Code 使用,而且完全開源。
對開發者來說,這篇文章要解決的痛點很明確:「Generate unit tests」這句提示詞背後有太多沒說清楚的問題——哪些程式碼需要測試?專案用哪個測試框架?測試該放哪裡?build 找得到嗎?測試該驗證什麼?微軟這套 Agent 的答案不是「多寫幾行提示詞」,而是讓 Agent 自己把這些研究做完。
一句話總結
微軟把「生成單元測試」從「一句提示詞」升級成「完整的信任迴圈」(Trust Loop):學習儲存庫 → 規劃 → 撰寫 → 編譯 → 執行 → 驗證測試真的有用。這就是它比原生 Copilot 可靠的核心原因。
code-testing-generator 是什麼?
它是微軟 .NET 團隊開發的開源、多語言單元測試生成 Agent,放在 dotnet/skills 儲存庫的 dotnet-test 外掛中(MIT 授權)。
它的三個核心能力
| 能力 | 說明 |
|---|---|
| 自動學習儲存庫 | 偵測語言與測試框架、找現有測試的擺放慣例、找出正確的 build/test 指令 |
| 單元測試 + Mock | 隔離受測程式碼、模擬外部服務;刻意避開會呼叫外部 URL、開 port、依賴精確時間的脆弱測試 |
| 品質驗證(Trust Loop) | 不只讓測試通過,還會做輕量變異測試、檢查弱斷言、確認每個需求場景都有對應測試 |
⚠️ 範圍限制:它只寫單元測試。整合測試(Integration)、端對端(E2E)、瀏覽器與效能測試目前不在範圍內。
執行流程:不是直接寫測試
Agent 收到提示詞後不會馬上動手寫測試,而是按順序執行:
1️⃣ 先學習儲存庫
- 搜尋需要測試的程式碼
- 偵測語言與測試框架
- 看現有測試的擺放位置與寫法
- 找出正確的 build 與 test 指令
這個步驟解決了一個常見問題:新測試專案單獨 build 會過,但 CI 永遠不會跑它——因為沒有加進 solution 或 repo 的測試指令裡。Agent 會確認 repo 的測試發現機制能找到新測試。
2️⃣ 選擇適當的工作量
Agent 依任務範圍自動選三條路徑:
| 路徑 | 適用場景 | 行為 |
|---|---|---|
| Direct(直接) | 單一檔案、極小範圍 | 直接讀碼→寫測試→驗證,跳過複雜協調以加快速度 |
| Single pass(單次) | 中等範圍 | 研究→規劃→實作,一次完整循環 |
| Iterative(迭代) | 大型範圍、有覆蓋率目標 | 重複「研究-規劃-實作-驗證」,逐步補齊覆蓋率缺口 |
3️⃣ 規劃並撰寫測試
- 大任務會先列出需要測試的程式碼清單,從簡單的開始、再到依賴多的
- 每個行為對應一個測試檔
- 不修改生產程式碼——測試有錯就修正測試,不是改產品碼
4️⃣ 驗證測試真的有用
一個測試「會過」不代表「有價值」——它可能只檢查結果不是 null、測錯方法、甚至方法永遠回傳預設值也會過。Agent 在完成前會檢查:
- 輕量變異測試:對程式碼做微小變更,確認測試會失敗 → 證明測試有效
- 檢查弱斷言或缺失斷言
- 確認每個要求的場景都有對應測試
- build 整個 workspace、跑完整測試套件、確認 repo 的測試指令能找到新測試
實測數據:92.1% vs 78.9%
微軟用 152 個真實儲存庫任務做內部基準測試(兩邊用相同模型與提示詞),結果:
| 指標 | 專用 Agent | 原生 Copilot |
|---|---|---|
| 任務完成率 | 140/152(92.1%) | 120/152(78.9%) |
| 解決方案成功建置 | 148 | 145 |
| 最終測試套件通過 | 149 | 147 |
| 生成測試數 | 6,963 | 7,129 |
| 平均行覆蓋率 | 72.4% | 72.2% |
| 平均任務耗時 | 359 秒 | 380 秒 |
關鍵洞察:專用 Agent 生成的測試少了 2.3%,但完成任務更多、速度快 5.5%——優勢來自可靠性,不是產量。
模糊提示詞的優勢最明顯
| 提示詞類型 | 專用 Agent | 原生 Copilot |
|---|---|---|
| 模糊提示詞(89 任務) | 79(88.8%) | 59(66.3%) |
| 詳細提示詞(63 任務) | 61(96.8%) | 61(96.8%) |
| 指定 code diff(15 任務) | 15(100%) | 0(0%) |
模糊提示詞的失敗率降了 67%,20 個淨勝場全部來自這類任務。這正是 Agent 的設計目標:做開發者沒寫進提示詞的研究。
跨語言與跨模型都有效
跨語言(Claude Opus 執行):
| 語言 | 專用 Agent | 原生 Copilot |
|---|---|---|
| Python(15 任務) | 13(86.7%) | 6(40.0%) |
| Go(15 任務) | 15(100%) | 10(66.7%) |
| PowerShell(10 任務) | 7(70.0%) | 8(80.0%) |
跨模型(45 個 .NET 任務):
| 模型 | 專用 Agent | 原生 Copilot | 失敗率降幅 |
|---|---|---|---|
| Claude Opus 4.8 | 43/45(95.6%) | 35/45(77.8%) | 80% |
| GPT-5.5 | 41/45(91.1%) | 36/45(80.0%) | 56% |
| Claude Haiku 4.5 | 34/45(75.6%) | 25/45(55.6%) | 45% |
💡 有趣發現:好的 workflow 能把中階模型推到接近頂尖——專用 GPT-5.5 達 90.1%,比原生 Opus 還高 11 個百分點以上。
如何安裝使用
GitHub Copilot CLI
# 1. 新增 marketplace
/plugin marketplace add dotnet/skills
# 2. 安裝 dotnet-test 外掛
/plugin install dotnet-test@dotnet-agent-skills
# 3. 重啟 CLI
# 4. 從 agent 清單選 code-testing-generator
# 5. 輸入:Generate unit tests.
VS Code(預覽版)
在 settings.json 加入:
{
"chat.plugins.enabled": true,
"chat.plugins.marketplaces": ["dotnet/skills"]
}
設定後在 Copilot Chat 輸入 /plugins 或使用 @agentPlugins 篩選器安裝。
⚠️ VS Code 的 plugin 支援是預覽功能,可能會變動。Visual Studio 的支援正在開發中。
推薦提示詞範例
Generate unit tests.(讓 Agent 全權決定)Generate Jest tests for ...(指定框架)Add unit tests for my billing project(中等範圍)Achieve 80% coverage across the entire solution(迭代模式,覆蓋率目標)
背景知識:.NET Agent Skills 是什麼?
code-testing-generator 是微軟 dotnet/skills 儲存庫的一員。這個 repo 於 2026 年 3 月 9 日發布(MIT 授權),是 .NET 團隊精心挑選的核心技能與自訂 Agent 集合,最初含 10 個外掛(dotnet、dotnet-data、dotnet-diag、dotnet-msbuild、dotnet-nuget、dotnet-upgrade、dotnet-maui、dotnet-ai、dotnet-template-engine、dotnet-test)。
Agent Skills 基於開放的 agentskills.io 規範:每個技能是一個 SKILL.md 檔(YAML frontmatter 含 name/description/globs/tools + Markdown 本文),Agent 載入專案時會探索並應用這些規則,但不會像腳本一樣執行,而是融入決策過程。
Agent Skills vs MCP 的關鍵區別
| 面向 | Agent Skills | MCP 伺服器 |
|---|---|---|
| 本質 | 知識包(Markdown + YAML) | 動態工具端點(執行中的伺服器) |
| 執行模型 | Agent 讀取並應用知識 | Agent 呼叫工具 |
| 執行時期依賴 | 無(靜態檔案) | 需要常駐伺服器 |
| 適用場景 | 領域知識、最佳實踐 | 工具執行、資料存取 |
一句話:Skills 是食譜(告訴 Agent 該做什麼),MCP 是食材(讓 Agent 實際動手)。 兩者互補,微軟與 Uno Platform 等夥伴把兩者結合,形成完整的 Agent 棧。
對台灣開發者的實用建議
- 如果你是 .NET/C# 開發者:直接在 Copilot CLI 裝起來,從
Generate unit tests.開始——模糊提示詞正是它的強項 - 如果你是 Python/Go/TS 開發者:同樣適用(Python 完成率從 40% 拉到 86.7%,Go 100%),不需要 C# 背景
- 如果你是 Tech Lead:可以把它當作「測試品質的基準線」——它的變異測試與弱斷言檢查,正好是很多團隊 code review 時最常漏掉的部分
常見問題 FAQ
code-testing-generator 是免費的嗎?
是的,完全開源(MIT 授權),程式碼在 dotnet/skills 儲存庫。但需要 GitHub Copilot CLI 或 VS Code + Copilot 訂閱才能執行。
它會改我的生產程式碼嗎?
不會。設計原則就是測試生成期間不修改生產程式碼——測試有問題就修正測試。
支援哪些語言?
C#、Python、TypeScript、JavaScript、Java、Go、Ruby、Rust、Swift、Kotlin、PowerShell、C++,共 12 種。它會學習每個儲存庫的慣例,而不是把 C# 的寫法套到所有語言。
能取代工程師寫測試嗎?
不能完全取代,但能大幅提升效率與可靠性。它的定位是「把開發者沒寫進提示詞的研究做完」,模糊需求的優勢最明顯。SWE Atlas 基準(更難的 44 任務)完成率 36.4% vs 27.3%——還有很大進步空間。
延伸閱讀
原始來源:Microsoft .NET Blog — From generated code to trusted code with a unit-test agent
