utils-test-write
为 Python 函数/模块编写契约驱动的单元测试。支持两种模式:(1) 直接写测试 - 用于单个函数或少量测试(1-3个函数);(2) MD checklist 模式 - 用于整个模块或大量测试(5+个函数)。触发词:写测试、测试、生成测试、为XX写测试、为XX模块写测试、先写测试规格、编写单元测试。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
为 Python 函数/模块编写契约驱动的单元测试。支持两种模式:(1) 直接写测试 - 用于单个函数或少量测试(1-3个函数);(2) MD checklist 模式 - 用于整个模块或大量测试(5+个函数)。触发词:写测试、测试、生成测试、为XX写测试、为XX模块写测试、先写测试规格、编写单元测试。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
为 AI Agent 创建元规则和领域知识,帮助用户在不熟悉领域建立 Agent 的思考方式和行为准则。专注于抽象的行事风格而非具体技术约束。适用场景:(1) 创建新 Agent 缺少行为准则,(2) 更新现有 Agent 的元规则或知识,(3) 用户不熟悉目标领域需要搜索最佳实践,(4) 希望 Agent 跨项目保持一致工作风格。
记录 AI 犯错或可改进点,生成可复用的学习资产。支持两种模式:(1) 当前会话 - 会话结束时触发,引导用户回顾本次会话中的纠正和可改进点;(2) 指定会话 - 通过 session_id 或 JSONL 文件路径分析历史会话。存储位置:D:\desktop\quackDocs\my_notes\ai_mistake\(index.md 索引 + records.md 实体)。触发词:记录错误、记录问题、AI 错误记录、会话总结、记录教训、record mistakes。
记录 AI 犯错或可改进点,生成可复用的学习资产。支持两种模式:(1) 当前会话 - 会话结束时触发,引导用户回顾本次会话中的纠正和可改进点;(2) 指定会话 - 通过 session_id 或 JSONL 文件路径分析历史会话。存储位置:D:\desktop\quackDocs\my_notes\ai_bug_history\(index.md 索引 + records.md 实体)。触发词:记录错误、记录问题、AI 错误记录、会话总结、记录教训、record mistakes。
指导 Manager 设计和创建 Loop 循环。当 Manager 需要创建自动化循环(如 Executor-Reviewer、Writer-Editor 模式)时使用。 提供完整的设计流程:需求澄清 → 节点设计 → 用户确认 → Subagent 验证 → 创建循环。 确保循环提示词质量,避免因上下文设计不当导致循环失败。 触发词:创建循环、loop、循环设计、迭代执行、自动审查。
记录架构决策(ADR)。触发条件:(1) 艰难选择——在方案间纠结、选了A但B也有优势、知道有副作用 (2) 重构/重大修改后——改了3+次才定方案、每次改有新考虑 (3) 奇怪代码——被问"为什么这样写"、审查被质疑、自己回看也觉得奇怪 (4) 用户做出重大决策或出现决策疑问
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
| name | utils-test-write |
| description | 为 Python 函数/模块编写契约驱动的单元测试。支持两种模式:(1) 直接写测试 - 用于单个函数或少量测试(1-3个函数);(2) MD checklist 模式 - 用于整个模块或大量测试(5+个函数)。触发词:写测试、测试、生成测试、为XX写测试、为XX模块写测试、先写测试规格、编写单元测试。 |
契约驱动,而非覆盖率驱动
测试函数承诺做什么(契约),而不是如何做(实现)。
适用场景:
触发词:
流程:
适用场景:
触发词:
流程:
test_<module>.md(checklist)判断标准:一次性编写的测试量
MD 的定位:
MD 的生命周期:
tests/unit/test_<module>.mddocs/temp/详细规则参考:references/test-rules.md
问自己:这个函数承诺做什么?
示例:MessageRouter.clear() 的契约:
一个测试只验证一个契约点。
async def test_function_name():
"""
契约:[函数承诺做什么]
验证方式:
1. [准备步骤]
2. [执行步骤]
3. [验证步骤]
如果失败,说明:[可能的原因]
"""
格式:test_<function>_<契约描述>
✅ 好的命名:
test_clear_empties_all_queuestest_stop_wakes_blocked_run❌ 坏的命名:
test_clear_1(无语义)test_clear_works(太模糊)准备 → 执行 → 验证
async def test_clear_empties_all_queues():
# 1. 准备
router = MessageRouter()
queue = asyncio.Queue()
router.register("agent", queue)
await queue.put("msg")
# 2. 执行
router.clear()
# 3. 验证
assert queue.empty(), "队列未清空"
# <Module> 测试规格
## 契约定义
### <FunctionName>
**契约点**:
1. [契约 1]
2. [契约 2]
**异常情况**:
- [异常 1]
**边界情况**:
- [边界 1]
---
## 测试用例
### <FunctionName>
#### 正常流程
- [ ] `test_<function>_<契约描述>` - 验证契约 1
- [ ] `test_<function>_<契约描述>` - 验证契约 2
#### 异常情况
- [ ] `test_<function>_<异常描述>` - 验证异常处理
#### 边界情况
- [ ] `test_<function>_<边界描述>` - 验证边界条件
❌ assert True
✅ assert all(task.done() for task in tasks)
❌ assert router._agents_queue == {}
✅ with pytest.raises(Exception): router.send_message(msg)
❌ mocker.patch('Agent.stop')(mock 了要测试的东西)
✅ mocker.patch('anthropic.Anthropic')(只 mock 外部 API)
❌ 一个测试里验证清空队列、清空注册表、幂等性 ✅ 拆分成 3 个独立测试
什么时候 mock:
datetime.now())什么时候不 mock:
Queue、dict、list)用户:"为 MessageRouter.clear() 写测试"
↓
1. Read 函数代码
2. 识别契约(内部思考)
3. Write 测试代码(tests/unit/test_message_router.py)
4. Bash 运行测试(pytest tests/unit/test_message_router.py -v)
5. 报告结果
用户:"为 MessageRouter 模块写测试"
↓
1. Read 模块代码
2. 识别所有函数和契约
3. Write test_message_router.md(checklist)
4. 等待用户审查
↓
用户:"开始写测试"
↓
5. 逐个生成测试代码
6. 每完成一个,Edit MD(打勾 ✅)
7. Bash 运行测试
8. 全部完成后,询问是否删除 MD
tests/unit/test_<module>.pytests/unit/test_<module>.md(临时)pytest tests/unit/test_<module>.py -v完整的测试编写规则、反模式、示例,请参考:
references/test-rules.md