前言¶
寫單元測試是開發流程裏繞不開的一環,卻也是很多人能拖就拖的事。函數邊界沒想清楚、異常分支漏測、框架選型不一致,補測試往往比寫業務代碼還費時間。更常見的情況是:代碼已經合進主分支,覆蓋率指標壓下來,纔開始對着 IDE 裏空白的 test_*.py 或 *.test.ts 發愁。
AI 編程助手能幫你「寫幾個測試」,但輸出質量往往取決於當次對話裏你怎麼描述需求——有時只覆蓋 happy path,有時框架和項目現有約定對不上。Agent Skill 的思路,是把「怎麼分析代碼、怎麼選框架、怎麼組織測試報告」寫進一份可複用的 SKILL.md,讓 Agent 每次觸發時都走同一套流程。
本文介紹的 unit-test-generator,來自社區倉庫 JackyST0/awesome-agent-skills 的 examples/ 示例集。它是一個面向「根據源代碼生成單元測試」的 Skill 模板:結構清晰、門檻不高,很適合作爲你學習 Skill 寫法、或在團隊裏快速落地的起點。Skill 採用 CC0-1.0 許可,可自由複製與改造。
這是什麼¶
unit-test-generator 是一份 Agent Skill 指令包,核心文件是目錄下的 SKILL.md。Agent 讀取該文件後,會在用戶提出「生成單元測試」「爲函數/類寫測試」「提高代碼覆蓋率」等需求時,按固定步驟分析源碼並輸出測試代碼與覆蓋說明。
它並不綁定某一家 AI 產品。同一套 Skill 目錄可以放到 Cursor、Claude Code、GitHub Copilot、OpenAI Codex 等支持 Agent Skills 規範的工具中(各平臺的安裝路徑見下文)。Skill 本身不包含獨立的測試運行器或 CLI,價值在於把測試生成的分析流程標準化,減少每次對話裏重複交代框架、邊界和輸出格式的時間。
核心功能與亮點¶
根據官方 SKILL.md,該 Skill 的工作流可以概括爲五步:
- 識別代碼 — 判斷編程語言與代碼結構(函數、類、模塊)。
- 分析功能 — 理清輸入、輸出與核心行爲。
- 確定邊界 — 找出邊界值與邊緣情況(空值、零、越界等)。
- 選擇框架 — 按語言匹配項目常用的測試框架。
- 生成測試 — 輸出可運行的測試用例,並附覆蓋說明。
支持的語言與測試框架¶
官方文檔列出了以下對應關係:
| 語言 | 測試框架 |
|---|---|
| Python | pytest、unittest |
| JavaScript / TypeScript | Jest、Mocha、Vitest |
| Java | JUnit、TestNG |
| Go | 標準庫 testing |
| Rust | cargo test(內置) |
需要說明的是:Skill 通過指令引導 Agent 做選型與生成,並不會自動檢測你倉庫裏已安裝的依賴;若項目已有既定框架(例如全棧 monorepo 統一用 Vitest),在對話裏點明框架名稱,輸出會更貼合現有工程。
覆蓋的測試類型¶
生成時會按四類場景組織用例:
- 正常路徑測試 — 驗證預期輸入下的標準行爲。
- 邊界條件測試 — 極值、臨界狀態。
- 異常處理測試 — 錯誤分支、拋錯類型與消息。
- 空值 / 空輸入測試 —
null、undefined、空字符串、空集合等。
結構化輸出報告¶
Skill 要求使用同目錄下 templates/test-report.md 模板格式化結果。模板包含:分析概述、被測函數列表、生成的測試代碼、按類別統計的用例數量,以及「如何運行」的命令佔位。這樣 Agent 的輸出不只是零散代碼塊,而是一份可歸檔、可評審的測試生成報告。
對初學者而言,這份示例 Skill 還有兩點實用價值:一是社區維護、可複製——目錄裏只有 SKILL.md 和模板,沒有複雜腳本;二是貼近高頻場景——補測試幾乎是 AI 編程裏被調用最多的任務之一,把它固化成 Skill,比每次手寫長提示詞更省事。
安裝與啓用¶
方式一:使用 awesome-agent-skills 一鍵安裝腳本(推薦)¶
倉庫提供了跨平臺安裝腳本,可將 unit-test-generator 連同 SKILL.md 和 templates/test-report.md 下載到對應平臺目錄。
macOS / Linux:
# 交互式選擇平臺與 Skill
curl -sL https://raw.githubusercontent.com/JackyST0/awesome-agent-skills/main/install.sh | bash
# 直接安裝到 Cursor
curl -sL https://raw.githubusercontent.com/JackyST0/awesome-agent-skills/main/install.sh | bash -s -- -p cursor -s unit-test-generator
Windows(PowerShell):
irm https://raw.githubusercontent.com/JackyST0/awesome-agent-skills/main/install.ps1 | iex
安裝完成後,Skill 會出現在目標平臺的 skills 目錄中,例如 Cursor 全局路徑爲 ~/.cursor/skills/unit-test-generator/。
方式二:手動複製¶
git clone https://github.com/JackyST0/awesome-agent-skills.git
cp -r awesome-agent-skills/examples/unit-test-generator ~/.cursor/skills/
若只希望當前項目可用,可複製到項目根目錄的 .cursor/skills/unit-test-generator/(或 .codex/skills/、.claude/skills/ 等,視工具而定),便於隨倉庫與團隊共享。
各 AI 編程工具中的目錄位置¶
根據 awesome-agent-skills 官方 README 與 使用指南:
| 平臺 | 全局目錄 | 項目目錄 |
|---|---|---|
| Cursor | ~/.cursor/skills/ |
.cursor/skills/ |
| Claude Code | ~/.claude/skills/ |
.claude/skills/ |
| GitHub Copilot | ~/.copilot/skills/ |
.github/skills/ |
| Windsurf | ~/.windsurf/skills/ |
.windsurf/skills/ |
| OpenAI Codex | ~/.codex/skills/ |
.codex/skills/ |
項目級 Skill 優先於全局同名 Skill。安裝後可通過 ls ~/.cursor/skills/unit-test-generator/ 確認 SKILL.md 與 templates/test-report.md 是否存在;若 Agent 未自動識別,重啓 IDE 或在對話中明確引用 Skill 名稱即可。
典型用法示例¶
官方 SKILL.md 給出了一個最小可復現示例。假設待測 Python 函數如下:
def divide(a: float, b: float) -> float:
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
在 Agent 對話中,你可以這樣觸發(自然語言即可,不必背固定咒語):
請爲下面的 divide 函數生成單元測試,使用 pytest,並按 test-report 模板輸出報告。
[paste 上面的源碼]
Skill 引導下的典型輸出結構如下(節選自官方示例):
import pytest
from your_module import divide
class TestDivide:
"""Tests for the divide function."""
def test_divide_positive_numbers(self):
assert divide(10, 2) == 5.0
assert divide(7, 2) == 3.5
def test_divide_negative_numbers(self):
assert divide(-10, 2) == -5.0
assert divide(10, -2) == -5.0
assert divide(-10, -2) == 5.0
def test_divide_by_zero_raises_error(self):
with pytest.raises(ValueError, match="Cannot divide by zero"):
divide(10, 0)
def test_divide_zero_numerator(self):
assert divide(0, 5) == 0.0
def test_divide_float_precision(self):
assert divide(1, 3) == pytest.approx(0.333333, rel=1e-5)
報告中的「測試覆蓋說明」會逐項勾選:正常除法、負數、除零異常、分子爲零、浮點精度等。把生成文件保存到項目測試目錄後,按項目慣例執行,例如:
pytest tests/test_divide.py -v
對 JavaScript 項目,同樣在提示裏註明「使用 Jest / Vitest」,並附上待測模塊路徑,Agent 會按 Skill 中的語言—框架表生成對應語法。
適用場景與注意事項¶
適合誰、什麼場景¶
- 補遺留代碼的測試:老模塊缺少單測,需要快速鋪一批邊界與異常用例。
- 新函數 TDD 輔助:實現函數後,讓 Agent 按 Skill 流程生成初稿,再人工刪減合併。
- 統一團隊輸出格式:通過
test-report.md模板,讓不同同事、不同對話裏的測試交付物結構一致。 - 學習 Skill 寫法:示例體量小、無外部依賴,適合 fork 後加上你們團隊的命名規範、Mock 約定或覆蓋率門檻。
使用時的限制與建議¶
- 生成結果需要人工審查。Skill 不能保證測試一定通過,也不能替代對業務語義的理解;合併前應在本地跑一遍測試套件。
- 導入路徑與 Mock 需對齊項目結構。官方示例裏的
from your_module import divide只是佔位,你要在對話裏說明真實模塊路徑,或生成後手動改 import。 - 未列出的語言需自行擴展。當前 Skill 只寫了 Python、JS/TS、Java、Go、Rust;若用 C#、Kotlin 等,可在 fork 的
SKILL.md裏追加框架行,或對話中直接指定。 - 與項目測試規範結合。若團隊要求 Given-When-Then 命名、禁止真實網絡請求等,建議把這些規則寫進 Skill 的
Instructions段,而不是每次口頭重複。 - 一鍵安裝腳本的範圍。
install.sh安裝的是本倉庫examples/下 bundled 的幾個示例 Skill,並非通用 Skill 包管理器;第三方 Skill 仍需手動複製或使用各平臺自有安裝方式。
小結¶
unit-test-generator 把「分析源碼 → 選框架 → 覆蓋邊界與異常 → 輸出結構化報告」這套單元測試生成流程,封裝成一份可安裝的 Agent Skill。它來自社區 curated 示例,輕量、可複製,適合作爲 AI 編程工作流裏補測試的標準化起點。
若你想進一步定製,可以直接 fork examples/unit-test-generator,在 SKILL.md 里加入你們項目的目錄約定、覆蓋率目標或 CI 命令;也可以瀏覽同倉庫的 code-review、debug-helper 等示例,拼成一套團隊專屬的 Agent 能力集。
官方地址:https://github.com/JackyST0/awesome-agent-skills/tree/main/examples/unit-test-generator