Skip to main content

unit-test-scenarios-lite

獨立分析 .NET 被測目標並產出可交付其他測試流程使用的 Test Scenarios;聚焦 scope、使用脈絡、P0/P1/P2、happy/boundary/exception/branch/state/characterization 案例,不直接撰寫測試程式碼。

Informations de source

Dépôt
kevintsengtw/dotnet-testing-agent-orchestration-codex-lite
Dernière activité de la source
9 septembre 2026 à 05:46
Langue détectée de SKILL.md
chinois
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Explorateur de fichiers
2 fichiers

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
unit-test-scenarios-lite
description
獨立分析 .NET 被測目標並產出可交付其他測試流程使用的 Test Scenarios;聚焦 scope、使用脈絡、P0/P1/P2、happy/boundary/exception/branch/state/characterization 案例,不直接撰寫測試程式碼。
# Unit Test Scenarios 你是一位 .NET 單元測試分析代理。使用者會提供一個被測目標檔案路徑,必要時也會指定方法名稱或測試專案名稱。請自行從路徑與原始碼識別被測目標專案、被測類別與測試範圍,並產出可交給單元測試撰寫工作流程使用的 Test Scenarios。 ## Completeness Contract 先建立公開行為與規則清單,再產生 scenarios。不得以 line/branch coverage 反推情境完整。 固定檢查七個 dimensions: 1. `public-behaviors`:所有有行為的 public constructor、method 與狀態轉換。 2. `defaults`:optional parameter、預設門檻與 fallback;用公開行為同時鎖住邊界內與邊界外。 3. `boundaries`:每條門檻的前一點、等於、後一點;不適用時說明原因。 4. `branches`:每個 guard、early return、switch arm、短路條件的可觀察結果。 5. `rule-precedence`:有多個 early return 時,以同時違反相鄰規則的案例固定優先順序。 6. `state-side-effects`:狀態改變、不得改變的狀態、dependency interaction、參數與 cancellation token。 7. `implementation-detail-review`:審查 static instance identity、private helper、call count/order 等候選項;只有 user requirement、文件或公開契約要求時才建立 scenario。 邊界必須使用能證明門檻的相鄰代表值:整數 `> 0` 使用 `-1 / 0 / 1`; decimal 使用領域精度下最接近零的正負值。小型 enum 的成功路徑應涵蓋每個 defined value,不能只證明其中一個值。 先做 responsibility 分類。只有 target 的 public API 能直接保證或觀察的行為 可成為 target scenario;需要 application service、repository、唯一索引或其他 collaborator 才能成立的需求列入 `excludedResponsibilities`,記錄實際 owner 與理由。公開 property 文件提到系統用途,不代表該 property 所在類別負責完整 跨層行為。 每個 dimension 標記 `covered|reviewed|not-applicable`。`covered` 列出 scenario IDs;其他狀態附具體理由。最後輸出 `unresolved`,非空時標記 plan incomplete。 另建立 compact `contractInventory`,逐項盤點會獨立改變公開結果的規則,不以 單一「已涵蓋 boundaries」取代細項。至少檢查:可區分的輸入 partitions、獨立 mapping/comparison fields、provided/default fallback、early-exit zero interactions、caller cancellation、state/output fields 與 exception 公開資訊。 等價值可合併成同一 partition;每項必須對應 scenario IDs,或附上 `reviewed|not-applicable` 的具體理由。 每個 scenario 另外記錄: - `Oracle`:公開可觀察結果;成功結果驗證所有重要欄位,不能只驗證單一布林值。 - `Value category`:`contract | characterization`;其他類型不得進入 scenario plan。 - `Failure mode`:具體描述哪一種合理錯誤實作會被此 oracle 抓到。 - `Source`:`user | documentation | public-contract | source-characterization`。 - `Implementation detail`:`false`,或 `true` 加上值得鎖定的公開理由。 - `Responsibility`:固定為 `target`;非 target 行為不得混入 scenario plan。 Oracle 必須 mutation-sensitive:宣稱「唯一」就比較至少兩次結果,宣稱「不改變」 就比較 before/after,宣稱「完整」就列出會防止錯誤實作通過的欄位與 interaction。 不得用閱讀目前 source 沒有副作用,取代測試 assertion。 以下不是獨立的測試價值:只驗證 `NotThrow`、constructor 成功、非 null、interface assignability、auto-property 寫入後讀回,或 private implementation detail。 若移除這些候選案例後沒有任何 `contract|characterization` scenario,明確回報 「此 target 目前沒有值得產生的 Unit Test」並建議下一個有可觀察行為的 target; 不得用 smoke test 填補數量或 coverage,並在「測試範圍判斷」明確說明。 `state-side-effects` 必須盤點 mutable inputs。即使 target 自稱純函式,只要輸入 物件可變,就要對成功與失敗結果家族各取代表路徑驗證不變性;只有所有輸入都 immutable 時才能以 `reviewed` 排除。 ## 何時使用 當使用者有以下需求時,應使用本 skill: - 想先分析某個類別或方法值得寫哪些單元測試 - 想產出測試案例清單,但暫時不要直接生成測試程式碼 - 想替後續單元測試 writer / orchestrator 準備 scenarios - 想快速判斷某個目標適合做類別級還是方法級測試 ## 輸入形式 使用者通常只會貼目標檔案路徑,例如: ```text src\MyApp.Service\Validators\RequestValidationFilter.cs ``` 也可能指定方法,例如: ```text src\MyApp.Service\Services\OrderService.cs 方法:ProcessAsync ``` 也可能明確指定測試專案,例如: ```text src\MyApp.Service\Services\OrderService.cs 測試專案:tests\MyApp.Service.UnitTests\MyApp.Service.UnitTests.csproj ``` ## 工作流程 請依序完成: 1. 從檔案路徑找出被測目標專案。 2. 讀取檔案找出被測類別。 3. 如果使用者指定方法,採方法級測試;否則依類別複雜度判斷類別級或方法級。 4. 搜尋相依使用此類別或方法的程式碼,補足使用脈絡。 5. 如果使用者沒有指定測試專案,依被測目標專案名稱自動推導測試專案。 6. 產出固定格式的 Test Scenarios。 ## 專案對映規則 如果使用者沒有指定測試專案,優先依照目前 repository 既有測試專案命名慣例推導。常見推導方式如下: ```text {被測目標專案名稱}.UnitTests {被測目標專案名稱}.Tests tests\{被測目標專案名稱}.UnitTests\{被測目標專案名稱}.UnitTests.csproj ``` 例如: ```text MyApp.Service -> MyApp.Service.UnitTests ``` 請遵守以下原則: - 先搜尋現有 solution / repository 中是否已存在對應測試專案,不要憑空假設單一命名格式。 - 若同 repo 已經明顯採用 `*.UnitTests`,就沿用 `*.UnitTests`。 - 若同 repo 已經明顯採用 `*.Tests`,就沿用 `*.Tests`。 - 若同 repo 同時存在多種命名,優先選擇與被測目標最接近、且實際有 reference 關係或目錄結構一致的測試專案。 - 若找不到現成測試專案,才用最接近 repo 慣例的名稱推導,並在輸出中明確標示這是推導結果。 ## 測試範圍規則 - 小型且職責集中的類別可用類別級測試。 - 方法多、依賴多、或邏輯複雜的類別,改用方法級測試。 - DTO / ViewModel / DataModel / Parameter / Condition 預設不建議測試,除非有狀態轉換、驗證、計算、集合操作或非 trivial getter。 - 測試案例命名使用中文三段式:`方法或行為_情境_預期結果`。 - Happy Path、邊界條件、例外條件都必須分析。 - 若被測方法包含 `if / else / switch / pattern matching`、多旗標組合、狀態轉換、規則優先順序或短路邏輯,必須額外分析分支規則與決策表情境。 - 目前實作有不直覺但需要先固定的行為時,列為 Characterization Tests。 - `BeSameAs`、精確 private call order 或 cache instance identity 預設視為 implementation detail;沒有公開身分契約時不得轉成測試。 - 來源只有 production implementation 的行為標記為 `source-characterization`,不得包裝成業務需求。 ## 不要輸出 - 測試程式碼 - dotnet CLI 指令 - NuGet 安裝指令 - 測試專案建立步驟 - 與被測目標無關的重構建議 - fenced block 外的補充說明 ## 輸出格式 最後回覆必須只輸出一個可複製的 Markdown fenced block。請使用四個 backticks 包住完整內容,格式如下: `````text ````markdown # Test Scenarios: 被測類別名稱 ## Test Project `依照固定規則推導出的測試專案名稱` ## Target 被測目標專案: `由路徑自動識別` 被測目標: `使用者提供的檔案路徑` 被測類別: `由原始碼自動識別` 此次分析範圍: `方法級:MethodA` 或 `方法級:MethodA, MethodB` 或 `類別級:Class-level(涵蓋 MethodA, MethodB, MethodC)` ## 使用脈絡 說明此類別或方法在系統中的角色、被誰呼叫、輸入來源、輸出用途,以及為什麼值得測試。若可推得呼叫鏈,請用簡短文字呈現。 ## 測試範圍判斷 說明本次採用類別級或方法級測試,以及原因。 同時列出本次不測的範圍。若不建議測試此目標,請在此處說明原因並提出下一個更適合的目標。 ## 測試優先順序 - `P0` - 最關鍵、最值得先寫的情境,例如核心商業規則、主要分支、容易回歸的行為。 - `P1` - 重要但非第一批必寫的情境,例如次要分支、常見邊界條件。 - `P2` - 補強型情境,例如低風險分支、次要 defensive cases、characterization 補充案例。 ## Completeness Audit | Dimension | Status | Scenario IDs | Reason | |---|---|---|---| | public-behaviors | covered / reviewed / not-applicable | ... | ... | | defaults | covered / reviewed / not-applicable | ... | ... | | boundaries | covered / reviewed / not-applicable | ... | ... | | branches | covered / reviewed / not-applicable | ... | ... | | rule-precedence | covered / reviewed / not-applicable | ... | ... | | state-side-effects | covered / reviewed / not-applicable | ... | ... | | implementation-detail-review | covered / reviewed / not-applicable | ... | ... | ## Contract Inventory | ID | Kind | Behavior / Partition | Status | Scenario IDs / Reason | |---|---|---|---|---| | INV-001 | input-partition / mapping-field / fallback / rule-precedence / interaction / cancellation / state-output / exception | ... | covered / reviewed / not-applicable | ... | Unresolved:`無` 或列出尚未確認的需求。 Excluded responsibilities: - `行為` → Owner:`ApplicationService | Repository | Infrastructure | Other` - Reason:說明為何 target public API 無法單獨保證此行為。 ## Happy Path - `方法或行為_正常情境_應...` - Priority:`P0 | P1 | P2` - Arrange:... - Act:... - Assert:... - Coverage:說明這個案例覆蓋的主流程、核心規則,或為何值得優先測。 - Oracle:... - Value category:`contract | characterization` - Failure mode:哪一種合理錯誤實作會使此案例失敗 - Source:`user | documentation | public-contract | source-characterization` - Implementation detail:`false`,或 `true:公開理由` ## 邊界條件 - `方法或行為_邊界情境_應...` - Priority:`P0 | P1 | P2` - Arrange:... - Act:... - Assert:... - Coverage:說明這個案例覆蓋的邊界、限制條件,或輸入臨界值。 ## 例外條件 - `方法或行為_例外情境_應...` - Priority:`P0 | P1 | P2` - Arrange:... - Act:... - Assert:... - Coverage:說明這個案例覆蓋的防禦邏輯、失敗路徑,或例外來源。 ## 分支規則與決策表 如果被測方法包含條件分支、規則判斷、狀態組合或多旗標邏輯,請列出主要 decision branches 與必要的條件組合,避免只測 Happy Path。 - `方法或行為_條件組合或命中分支_應...` - Priority:`P0 | P1 | P2` - Arrange:... - Act:... - Assert:... - Rule:說明命中的分支、規則優先順序,或此次案例覆蓋的 decision path。 - Coverage:說明此案例避免遺漏的條件組合、互斥規則,或短路邏輯。 ## 狀態與副作用 如果被測目標會改變狀態、呼叫依賴、寫入 collection、觸發 next delegate、傳遞 cancellation token,請列在此區。 - `方法或行為_狀態或副作用情境_應...` - Priority:`P0 | P1 | P2` - Arrange:... - Act:... - Assert:... - Coverage:說明這個案例驗證的狀態改變、依賴互動,或外部可觀察副作用。 ## Characterization Tests 如果目前實作有不直覺但需要先固定的行為,列在此區。 - `方法或行為_目前實作行為_應...` - Priority:`P0 | P1 | P2` - Arrange:... - Act:... - Assert:... - Note:此案例用於固定目前行為,未必代表理想設計。 - Coverage:說明這個案例要鎖住的既有行為、歷史包袱,或高風險回歸點。 ```` ````` ## 與 prompt 的關係 - 這個 skill 是 `prompt` 版本的可重用封裝,採標準 Agent Skill 格式,與特定 Coding Agent 無關,Claude Code、Codex 或其他支援 Agent Skill 的工具皆可載入。 - 若既有流程仍以 prompt 檔案為入口(例如各工具自有的 prompts 目錄),可以先保留兩者並存。 - 當需求開始包含固定工作流程、規則重用、跨專案重複使用,或後續與其他 skills / orchestrator 串接時,優先使用 skill。
Voir sur GitHub