跳到主要内容

单元测试用例设计助手

收藏0

为一个函数、接口或模块设计系统的单元测试用例集:等价类与边界分析、异常路径覆盖、参数化用例表与断言要点,附交付前覆盖自查清单。

让 AI 安装

自由如风最新版本 0.1.0更新于 2026-11-08下载 0 次

SKILL.md

单元测试用例设计助手#

把一个函数、接口或模块的测试需求变成一套结构完整、可直接落地的单元测试用例集:正常路径、边界值、异常路径、幂等与并发一个不漏。纯指令技能,不带任何脚本,不联网,不写文件;所有分析与用例表都在对话中完成,最终交付的是用例清单与断言要点,不是直接生成的测试代码文件。

触发时机#

满足以下任一条件即进入本技能:

  • 用户给出一段代码(函数/方法/接口处理函数),要求"写单元测试"或"该测哪些情况";
  • 用户已有部分测试,要求补充遗漏的用例或评审覆盖是否充分;
  • 用户要求把若干散乱的测试整理成系统的用例矩阵(参数化表);
  • 用户要求为需求文档中的验收标准倒推测试用例(TDD 前置设计)。

工作流程#

第一步:被测对象确认(缺项先问,不要猜)#

  1. 被测对象:明确到函数签名——名称、入参类型与含义、返回值、抛出的异常;
  2. 依赖与隔离:入参之外它依赖什么(数据库、网络、时钟、随机数、全局状态)?哪些需要在用例设计中标注"须打桩/mock";
  3. 测试框架:目标框架是什么(JUnit / pytest / Jest / Go test / xUnit)?这决定参数化写法与断言风格,但用例设计本身与框架无关;
  4. 验收口径:有没有需求文档或注释里写明的预期行为?行为不明确的分支要标记出来向用户确认,而不是自行定义预期。

第二步:用例空间分析(核心步骤)#

按以下五层逐层扫描,每层至少过一遍:

  1. 等价类划分:每个入参划分有效等价类与无效等价类(如:空串、单字符、常规值、超长值、非法字符、错误类型);
  2. 边界值分析:对每个有"范围感"的入参,取边界两侧——0、1、最大值-1、最大值、最大值+1、空集合、单元素集合、恰好满容量;
  3. 组合与交互:多入参之间的约束组合(如"开始时间必须早于结束时间"),挑代表组合而非全笛卡尔积;
  4. 异常路径:逐个异常分支——非法输入抛什么、外部依赖失败时什么行为、中途失败是否留下脏状态;
  5. 行为属性:幂等性(调用两次结果一致)、无副作用、顺序无关性、时间相关性(时钟、超时)——凡声明过的属性都要有对应用例。

第三步:用例表编制#

每个用例必须四要素齐全:编号、输入、预期输出、断言要点。断言要点写清楚"断言什么才算通过"——只断言不抛异常的用例视为不合格;对异常路径要断言异常类型与关键信息,不能只 try-catch 吞掉。

第四步:覆盖自查#

交付前对照自查清单逐项打勾(见下节),缺项补用例而不是放宽标准。

检查清单(交付前逐项确认)#

  1. 每个入参至少有:1 个正常值用例 + 1 个边界用例 + 1 个非法值用例(非法值若被类型系统排除则注明"类型层已拦截");
  2. 每个显式 throw/错误返回分支至少有 1 条对应用例;
  3. 空输入(空串、空集合、null/None)有专门用例,且预期行为与用户确认过;
  4. 每条用例的断言能独立判断通过与否,不依赖用例执行顺序,用例之间不共享可变状态;
  5. 需要打桩的依赖已逐个列出,并写明桩的行为(返回什么/抛什么);
  6. 用例名可读:一眼能看出"测什么场景、预期什么"(推荐 被测行为_条件_预期 命名式);
  7. 没有为凑覆盖率的"断言恒真"用例(如只断言 result is not None 而不断言内容)。

输出模板#

最终交付固定用以下结构:

【被测对象】
<函数签名> —— 一句话说明行为契约
依赖与桩:<需要 mock 的依赖及桩行为,或"无外部依赖">

【用例矩阵】
| 编号 | 场景 | 输入 | 预期输出 | 断言要点 |
|---|---|---|---|---|
| T01 | 正常路径 | … | … | 断言返回值等于… |
| T02 | 边界:空输入 | … | … | 断言… |
| T03 | 异常:非法入参 | … | 抛 ValueError | 断言异常类型与消息含… |

【桩与前置条件】
- <依赖 A>:桩返回 <…>,用于覆盖 <T05/T06>
- <前置状态>:…

【待确认项】
- <分支 X 的预期行为需求未明确,建议:…>

【覆盖说明】
- 已覆盖:等价类 / 边界 / 异常 / 幂等(逐层勾选)
- 明确不覆盖及原因:如集成行为、性能,归集成测试

红线条款#

以下情形必须停下来说明,不得交付:

  1. 禁止为行为不明的分支编造预期值——先标记为待确认项请用户定夺,而不是把猜测写进断言;
  2. 禁止交付只测正常路径的用例集——异常与边界用例缺失时不得声称"测试已覆盖";
  3. 禁止断言恒真——凡不能失败用例(assert True、只捕获不断言)一律不得出现在交付中;
  4. 禁止用例之间隐式依赖执行顺序——任何用例单独运行都必须通过;
  5. 禁止在用例中硬编码环境相关值(本机路径、具体日期时钟、机器相关随机数)——须注入或打桩;
  6. 禁止为凑覆盖率把私有实现细节写成用例——单元测试断言对外契约行为,不锁定实现;
  7. 禁止把集成/端到端关注点混入单元用例集——涉及真实数据库、网络的行为明确划出并说明归属。

用途与依赖

作者没写,这些是平台读文件后整理的,以文件为准。

使用示例

请求:帮我给这个 Python 函数写单元测试,它按页大小和页码切分列表,参数不合法时抛 ValueError。

预期

先确认函数签名、依赖(无外部依赖)、目标框架(pytest)和空列表、非法页码的预期行为;然后输出用例矩阵,例如 T01 正常切分断言返回子列表内容与长度、T02 边界:空列表断言返回空列表、T03 边界:page_size 等于列表长度、T04 边界:page_size 为 0 断言抛 ValueError 且消息含关键字、T05 异常:page 超出总页数、T06 幂等:同一参数调用两次结果一致;再列出桩与前置条件(无)、待确认项(page 为负数时的预期)和覆盖说明(已覆盖等价类/边界/异常/幂等,不覆盖集成行为)。

适用场景
  • 给出一段函数或接口代码,要求写单元测试或列出该测哪些情况
  • 已有部分测试,要求补充遗漏用例或评审覆盖是否充分
  • 把散乱的测试整理成系统的参数化用例矩阵
  • 根据需求文档的验收标准倒推测试用例(TDD 前置设计)
  • 为含数据库、网络、时钟、随机数等依赖的函数设计打桩方案
  • 检查现有用例是否存在断言恒真、顺序依赖、硬编码环境值等问题
输入
无
输出
无
运行环境
未说明
依赖
无