测试覆盖率不够怎么补:找出缺失的测试场景提示词(按代码分支与业务风险排序)
已经有一些测试、但不确定漏了什么,或者覆盖率报告显示某些分支没测到时用:把被测代码和现有测试一起给 AI,让它对照分支、边界和业务规则找出遗漏的场景,按风险排序,并补写最重要的几个测试。
通用大模型 对话模型通用
请对照被测代码和现有测试,找出还没有被覆盖的测试场景。 - 语言与测试框架:[语言与测试框架](例:Java + JUnit 5 + Mockito) - 被测代码: [粘贴被测代码] - 现有测试: [粘贴现有测试] - 覆盖率报告中未覆盖的行或分支(没有就写无):[未覆盖的行] - 这段代码的业务重要性:[如涉及金额计算、只是展示格式化] 分析步骤: 1. 列出被测代码中所有的分支和判断条件(if、switch、三元表达式、提前返回、异常抛出、循环的零次和多次),以及每个条件的真假两种情况。 2. 把现有测试一一对应到这些分支,标出哪些已覆盖、哪些没有。 3. 除了代码分支,再检查这些容易遗漏的场景: - 边界值:零、负数、最大值、空集合、单元素集合、恰好等于阈值; - 异常路径:依赖抛异常、返回空值、超时; - 组合条件:多个条件同时成立时,是否只测了单独成立的情况; - 状态与顺序:调用多次、调用顺序变化; - 现有测试的质量问题:没有断言、断言太弱(只判断不为空)、断言了实现细节而不是结果。 4. 输出缺失场景表:场景 | 对应的代码位置 | 可能隐藏的问题 | 风险等级(高 / 中 / 低)。按风险从高到低排序。 5. 为风险最高的 3 到 5 个场景写出完整测试代码,风格与现有测试保持一致。 注意:覆盖率高不等于测得好。不要为了提高覆盖率给 getter、setter 这类没有逻辑的代码写测试。
高亮处换成你自己的内容:[语言与测试框架]、[粘贴被测代码]、[粘贴现有测试]、[未覆盖的行]、[如涉及金额计算、只是展示格式化]
ChatGPT Plus 充值
已被复制 0 次
使用说明
怎么填变量:被测代码和现有测试都要完整贴上,AI 才能做对照。[这段代码的业务重要性] 决定补测的深度:金额、权限、状态流转相关的代码值得把边界测透,纯展示格式化的代码点到为止。
常见坑:
- 覆盖率工具说某行「已覆盖」,只代表它被执行过,不代表结果被检查过。没有断言或断言太弱的测试,模板专门要求一起找出来。
- 「会员且满 100 元才打折」这类组合条件,分别测过「是会员」和「满 100」,覆盖率可能已经满了,但「是会员但不满 100」这种情况可能根本没测。
- 不要为了数字好看给没有逻辑的代码写测试,把精力留给高风险分支。
追问技巧:补完测试后,追问「如果我故意把第 N 行的大于号改成大于等于,现有测试能发现吗」,用这种「手动变异」的方式检验测试是否真的有效。
示例输出
示例,仅供参考(会员折扣计算,节选)
| 场景 | 代码位置 | 可能隐藏的问题 | 风险 |
|---|---|---|---|
| 会员但订单金额恰好等于 100 | if (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);
}同款作品
用这条提示词做出来的作品;原作者会因此获得积分
还没有同款,来做第一个。


0 条评论
还没有评论,来抢沙发~