test-gen-zhlisted
Install: claude install-skill YuAICode/ai-skills
# test-gen-zh — 测试用例生成
给指定函数或文件自动生成测试,配合 TDD 工作流,覆盖正常路径、边界值、错误路径,而不是凑覆盖率数字。
## 何时触发
用户说以下任意一种:
- "帮我生成测试 / 给这个函数写测试 / 补测试用例"
- "test-gen-zh \<文件或函数名\>"
- "这个函数没测试,帮我写一下"
- "TDD — 先给我写 test"
## 用法
### 1. 探测测试框架
```bash
bash <skill>/bin/detect-framework.sh [项目目录]
# 输出:go test | jest | vitest | flutter test | pytest | cargo test | unknown
# 默认当前目录;不存在或识别不了均输出 unknown
```
### 2. 流程
1. **探测框架**:跑 `bin/detect-framework.sh <项目目录>` 确认测试框架。若输出 `unknown`,询问用户用哪个框架后继续。
2. **读实现**:读目标函数 / 文件,理解:
- 函数签名(参数类型、返回值、可能抛出的错误)
- 核心逻辑分支
- 依赖(外部调用、IO、全局状态)
3. **参照已有测试风格**:若项目里有现成测试文件,先读一个做风格参照(命名、断言库、fixture 写法)。
4. **生成测试**:按该框架惯例写测试,三条路径都要覆盖:
- **正常路径**:典型入参 → 预期返回值
- **边界值**:空值、零值、最大/最小、类型边界
- **错误路径**:非法输入、外部依赖失败、超时、panic/exception
5. **确认可跑**:给出完整可执行的测试命令,若有 mock/stub 依赖一并给出。
## 输出格式
```
## <文件/函数名> 测试生成报告
**框架**:`<框架>` (由 detect-framework.sh 探测)
**测试文件**:`<建议路径>`
### 覆盖清单
- [ ] 正常路径:<说明>
- [ ] 边界值:<说明>
- [ ] 错误路径:<说明>
### 测试代码
\`\`\`<语言>
<完整可运行的测试代码>
\`\`\`
### 运行方式
\`\`\`bash
<运行命令>
\`\`\`
```
## 硬规则
1. **测真实行为,不是凑覆盖率**:每个 case 必须有明确的"验证什么",不写"assert True"这类无效断言。
2. **不臆造被测代码的行为**:拿不准函数在某边界返回什么,先读实现确认,再写断言。不要猜。
3. **遵循项目已有测试风格**:命名、fixture、mock 方式都跟项目已有测试保持一致;若无已有测试则按框架官方惯例。
4. **依赖隔离**:有 IO / 网络 / DB 调用的地方给出 mock/stub/fake 方案,不要生成需要真实环境才能跑的测试。
5. **输出可直接复制执行**:测试代码完整(含 import),运行命令可直接粘贴跑。
6. **不写任何被测代码**:只写测试;若被测函数不存在,说明后让用户先实现。
## 边界
- 不依赖外部服务;`bin/detect-framework.sh` 纯 bash + grep,离线可用。
- 不修改被测文件。
- 仅生成测试代码,不执行跑测试(可在"运行方式"里给命令)。
- 框架识别不了时(`unknown