给测试用例挑漏
找出没被覆盖的分支,按线上事故概率排序
下面是我的实现和现有测试。请找出测试没覆盖到的地方:1)列出所有分支和边界,标出哪些没有用例;2)按「一旦出错线上影响最大」排序,给出前 5 个应该补的用例(写清输入、预期、为什么容易漏);3)指出哪些用例其实是重复的、删掉不影响信心;4)有没有哪个测试在断言实现细节而不是行为。 ``` [粘贴代码与测试] ```
使用建议
补用例先补它排前三的那几个;剩下的等真出过问题再补,别一次写满。
适合什么场景
- 核心的支付、优惠或权限逻辑要改,测试是半年前写的,不确定还管不管用。
- 覆盖率报告 78%,但线上事故仍然出在边界条件上。
不适合的场景
- 代码本身还没定型(接口一天改三次):先定契约,否则测试跟着一起改。
- 你只想把覆盖率数字做上去:这个提示词会告诉你哪些用例根本不值得写。
示例
输入
def apply_coupon(order, coupon):
if coupon.expired_at < now(): return order
if order.amount < coupon.min_amount: return order
if coupon.id in order.used_coupon_ids: return order
if len(order.applied_coupons) >= 3: return order
return order._replace(amount=order.amount - coupon.value)
现有测试:正常抵扣一单、过期券不抵扣。你会得到
列出未覆盖:金额恰好等于门槛、同一用户第二次使用、叠加超过 3 张、抵扣后金额为 0 或负数、并发下同一张券被两个订单使用。按线上影响排序,前 5 应补「抵扣后为负」和「并发复用」;并指出「过期券」用例断言了 `_is_expired` 调用,是在断言实现细节而非行为。
常见误用
- 只贴实现不贴现有测试:它会把「没覆盖」和「你没贴出来」混为一谈。
- 让它「补全所有测试」,收回 40 个低价值用例,维护成本高于收益。
可以这样改
- 加「只给用例的输入、预期和为什么容易漏,不要写测试代码」,先评审清单再写代码,省掉大段返工。
- 加「标出哪些用例需要 mock 时间或并发才能写」,能提前发现测试基础设施的缺口。