微軟開源 code-testing-generator:一個 Agent 搞定 12 種語言的單元測試,任務完成率 92.1%

code-testing-generator 是微軟 .NET 團隊開源的多語言單元測試生成 Agent,整合於 GitHub Copilot CLI 與 VS Code。它會先學習儲存庫的語言、測試框架與建置指令,再透過 Direct/Single pass/Iterative 三種路徑生成測試,最後用輕量變異測試驗證測試品質。實測 152 個任務完成率 92.1%(原生 Copilot 僅 78.9%),模糊提示詞下失敗率降低 67%,支援 C#、Python、Go、TypeScript 等 12 種語言。

  • Dennis
  • 7 分鐘閱讀
微軟開源 code-testing-generator:一個 Agent 搞定 12 種語言的單元測試,任務完成率 92.1%

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%)
解決方案成功建置148145
最終測試套件通過149147
生成測試數6,9637,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.843/45(95.6%)35/45(77.8%)80%
GPT-5.541/45(91.1%)36/45(80.0%)56%
Claude Haiku 4.534/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 個外掛(dotnetdotnet-datadotnet-diagdotnet-msbuilddotnet-nugetdotnet-upgradedotnet-mauidotnet-aidotnet-template-enginedotnet-test)。

Agent Skills 基於開放的 agentskills.io 規範:每個技能是一個 SKILL.md 檔(YAML frontmatter 含 name/description/globs/tools + Markdown 本文),Agent 載入專案時會探索並應用這些規則,但不會像腳本一樣執行,而是融入決策過程。

Agent Skills vs MCP 的關鍵區別

面向Agent SkillsMCP 伺服器
本質知識包(Markdown + YAML)動態工具端點(執行中的伺服器)
執行模型Agent 讀取並應用知識Agent 呼叫工具
執行時期依賴無(靜態檔案)需要常駐伺服器
適用場景領域知識、最佳實踐工具執行、資料存取

一句話:Skills 是食譜(告訴 Agent 該做什麼),MCP 是食材(讓 Agent 實際動手)。 兩者互補,微軟與 Uno Platform 等夥伴把兩者結合,形成完整的 Agent 棧。

對台灣開發者的實用建議

  1. 如果你是 .NET/C# 開發者:直接在 Copilot CLI 裝起來,從 Generate unit tests. 開始——模糊提示詞正是它的強項
  2. 如果你是 Python/Go/TS 開發者:同樣適用(Python 完成率從 40% 拉到 86.7%,Go 100%),不需要 C# 背景
  3. 如果你是 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

📬 訂閱 most.tw 電子報

每週精選 AI 工具教學與技術乾貨,直接送到你的信箱。免費、隨時可退訂。