测试覆盖率不够怎么补:找出缺失的测试场景提示词(按代码分支与业务风险排序)

已经有一些测试、但不确定漏了什么,或者覆盖率报告显示某些分支没测到时用:把被测代码和现有测试一起给 AI,让它对照分支、边界和业务规则找出遗漏的场景,按风险排序,并补写最重要的几个测试。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
请对照被测代码和现有测试,找出还没有被覆盖的测试场景。

- 语言与测试框架:[语言与测试框架](例:Java + JUnit 5 + Mockito)
- 被测代码:
  [粘贴被测代码]
- 现有测试:
  [粘贴现有测试]
- 覆盖率报告中未覆盖的行或分支(没有就写无):[未覆盖的行]
- 这段代码的业务重要性:[如涉及金额计算、只是展示格式化]

分析步骤:
1. 列出被测代码中所有的分支和判断条件(if、switch、三元表达式、提前返回、异常抛出、循环的零次和多次),以及每个条件的真假两种情况。
2. 把现有测试一一对应到这些分支,标出哪些已覆盖、哪些没有。
3. 除了代码分支,再检查这些容易遗漏的场景:
   - 边界值:零、负数、最大值、空集合、单元素集合、恰好等于阈值;
   - 异常路径:依赖抛异常、返回空值、超时;
   - 组合条件:多个条件同时成立时,是否只测了单独成立的情况;
   - 状态与顺序:调用多次、调用顺序变化;
   - 现有测试的质量问题:没有断言、断言太弱(只判断不为空)、断言了实现细节而不是结果。
4. 输出缺失场景表:场景 | 对应的代码位置 | 可能隐藏的问题 | 风险等级(高 / 中 / 低)。按风险从高到低排序。
5. 为风险最高的 3 到 5 个场景写出完整测试代码,风格与现有测试保持一致。

注意:覆盖率高不等于测得好。不要为了提高覆盖率给 getter、setter 这类没有逻辑的代码写测试。

高亮处换成你自己的内容:[语言与测试框架]、[粘贴被测代码]、[粘贴现有测试]、[未覆盖的行]、[如涉及金额计算、只是展示格式化]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:被测代码和现有测试都要完整贴上,AI 才能做对照。[这段代码的业务重要性] 决定补测的深度:金额、权限、状态流转相关的代码值得把边界测透,纯展示格式化的代码点到为止。

常见坑:

  • 覆盖率工具说某行「已覆盖」,只代表它被执行过,不代表结果被检查过。没有断言或断言太弱的测试,模板专门要求一起找出来。
  • 「会员且满 100 元才打折」这类组合条件,分别测过「是会员」和「满 100」,覆盖率可能已经满了,但「是会员但不满 100」这种情况可能根本没测。
  • 不要为了数字好看给没有逻辑的代码写测试,把精力留给高风险分支。

追问技巧:补完测试后,追问「如果我故意把第 N 行的大于号改成大于等于,现有测试能发现吗」,用这种「手动变异」的方式检验测试是否真的有效。

示例输出

示例,仅供参考(会员折扣计算,节选)
场景代码位置可能隐藏的问题风险
会员但订单金额恰好等于 100if (isMember && total >= 100)大于和大于等于写反高
非会员但金额满 100同上组合条件只测了会员侧高
优惠券与会员折扣叠加applyCoupon()先后顺序不同导致金额不同高
现有测试 testDiscount断言 assertNotNull(result)断言太弱,金额算错也会通过中
java
@Test
void 会员订单金额恰好100元时享受折扣() {
    var price = calculator.finalPrice(member(), new BigDecimal("100.00"));
    assertEquals(new BigDecimal("90.00"), price);
}

同款作品

用这条提示词做出来的作品;原作者会因此获得积分

做同款

还没有同款,来做第一个。

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~