人人都会AI编程

3.6.1 单元测试用例生成

更新时间:2026-06-30

单元测试用例应基于详细设计文档和实际代码逻辑生成,避免脱离实现凭空设计。通常按以下方式执行:

1. 用例来源

  • 接口契约:函数/方法的输入参数、返回值、异常声明。
  • 代码逻辑:通过静态阅读或工具扫描识别分支、循环、边界条件。
  • 需求规则:对核心业务规则(如计费、校验、状态转换)补充场景。

2. 设计方法
优先采用组合策略,避免过度设计:

  • 等价类划分 + 边界值:覆盖正常输入、临界值、非法值(如空字符串、负数、最大值)。
  • 路径覆盖:针对 if/elseswitchtry/catch 等多分支逻辑,确保每个分支至少执行一次;对核心算法要求条件覆盖。
  • 异常注入:主动构造空指针、类型错误、资源失败等异常路径。

3. 用例要素
每条用例须明确:

  • 标识:模块名_被测函数_场景,例:test_order_apply_discount_expired_coupon
  • 前置条件:Mock 对象初始化、依赖桩数据设置。
  • 输入数据:具体的参数值或状态上下文。
  • 预期结果:精确的返回值、对象状态变更或抛出的异常类型。
  • 清理动作:释放资源、重置静态状态,确保用例间无依赖。

4. 覆盖标准

  • 语句覆盖率达到 100%
  • 分支覆盖率不低于 80%;复杂计算逻辑须达到 100%
  • 对无法覆盖的防御性代码段,须在测试报告中注明原因。

5. 实践要求

  • 单一职责:一个用例只验证一个判定条件,避免多断言堆叠。
  • 可重复执行:禁止依赖真实外部服务(数据库、缓存、第三方接口),一律使用 Mock/Stub。
  • 自动化友好:测试代码与产品代码同仓库维护,命名遵循框架规范(如 JUnit 的 testXxx 或 pytest 的 test_xxx),确保可随 CI 流水线自动运行。

示例:对函数 calculateFee(int distance),至少生成 3 条用例:
- distance = 1(起步价区间,验证基础费用)
- distance = 10(临界值,验证阶梯计价切换)
- distance = -1(非法输入,验证抛出 IllegalArgumentException