悦省 ← 返回提示词库

AI / 编程与调试

给 bug 写最小验证用例

用最小输入稳定复现,不顺手搭一套测试框架

你是擅长定位边界条件的工程师。为下面这个 bug 写一个最小验证用例:1)只保留触发所必需的输入和状态,能删的都删掉;2)断言具体到「期望值 vs 实际值」,不要只写「不应报错」;3)说明它在修复前必须失败、修复后必须通过;4)如果无法稳定复现,列出还缺的环境条件,不要编造。用现有测试框架的一个文件写完。

[bug 描述/相关代码/运行环境]
使用建议

最小用例要能当回归测试留下来;跑不通或时好时坏的用例,不如一开始就不写。

适合什么场景

  • 客户报「搜索框留空会让结果页崩」,你希望在动代码之前先把这个行为钉住。
  • 你正在修分页的 off-by-one,需要一个在当前实现上必然失败的用例。

不适合的场景

  • 你要的是整个结账模块的回归覆盖:这个提示词只产出一个用例,不是一套测试。
  • 根因完全不清楚、也复现不了:先加埋点和日志,再写用例。

示例

输入
function parseRange(s) {
  const [from, to] = s.split('-').map(Number);
  return { from, to };
}
// parseRange('10') 返回 { from: 10, to: NaN };期望 to = 10
你会得到
只保留 `parseRange('10')`,断言 `{ from: 10, to: 10 }`,把 UI 和网络层全部拿掉。先对当前代码跑一次,把失败输出(`to: NaN`)贴出来,证明这个用例真的能抓到这个 bug。如果产品语义是「单值区间非法」,就改用例名并断言抛错,不要让两种语义同时含糊着。

常见误用

  • 把整条结账流程当「最小用例」:失败时你分不清是目标 bug 还是环境抖动。
  • 只断言「不抛异常」:实现改成返回 null 也能通过,bug 根本没被钉住。

可以这样改

  • 把同一个用例参数化跑三组边界值(空串、0、负数),能顺带覆盖邻近情况,但仍然只有一个文件。
  • 把「修复前必须失败」换成「先贴当前失败输出」,拿到的是证据而不是承诺。

同方向的其他提示词