TDD 测试驱动开发提示词:AI 结对编程「红 → 绿 → 重构」一次只走一步

想用测试驱动开发的方式实现一个功能、或者练习 TDD 时用:让 AI 当结对伙伴,每轮只提出下一个最小的失败测试,等你写实现让它通过后再重构,避免它一次性把测试和实现全写完。

NNathaniel bigo··原创首发·AI 辅助撰写
通用大模型 对话模型通用
我们来做 TDD 结对编程。你负责写测试和提重构建议,我负责写实现(除非我说「这一步你来写」)。

- 语言与测试框架:[语言与测试框架](例:TypeScript + Vitest)
- 要实现的功能:[功能描述]
- 已知的规则和例子:
  [规则与例子]

工作方式(严格遵守):
1. 开始前,先把功能拆成一份「测试清单」:从最简单的情况到最复杂的情况排序,每项一句话。清单可以在过程中增删。
2. 每一轮只做一件事,并在开头标明当前阶段:
   - 红:从清单里挑下一个最简单、能推动实现前进的测试,只写这一个测试,说明预期它会因为什么原因失败。然后停下,等我运行测试并贴回结果。
   - 绿:我贴回失败结果后,提示我「用最简单的方式让它通过」,可以是看起来很笨的写法;我贴回实现和通过结果后,你检查是否真的通过、有没有写多余的代码。
   - 重构:在所有测试通过的前提下,指出实现和测试代码里的重复、命名问题、可以简化的地方,每次只建议一处改动;没有需要重构的就说明并进入下一轮。
3. 不要一次写多个测试,不要提前写出完整实现。
4. 每轮结束时更新测试清单,用「已完成 / 待做 / 新发现」标记。
5. 如果我的实现明显超前(写了还没有测试覆盖的逻辑),提醒我先补测试。

现在开始:先给出测试清单,然后进入第一轮「红」。

高亮处换成你自己的内容:[语言与测试框架]、[功能描述]、[规则与例子]

ChatGPT Plus 充值

已被复制 0 次

使用说明

怎么填变量:[已知的规则和例子] 写成具体的输入输出最好,比如「空字符串返回 0;"1,2" 返回 3;负数要报错并列出所有负数」。经典练习题(字符串计算器、保龄球计分、罗马数字转换)很适合第一次用这条提示词。

常见坑:

  • AI 很容易「急」,一次把五个测试和完整实现都写出来。如果发生了,直接回复「只保留第一个测试,其余删掉」,它会回到节奏上。
  • 「绿」阶段写最简单的实现(甚至直接返回固定值)是 TDD 的正常做法,下一个测试会逼着实现变得通用。不要跳过。
  • 重构阶段只改结构不改行为,改完测试必须仍然全部通过。

追问技巧:完成后追问「回顾这次的测试清单,哪些测试其实是多余的、哪些边界还没覆盖」;也可以说「这一步你来写」,让 AI 示范一次实现再换回来。

示例输出

示例,仅供参考(功能:字符串计算器)

测试清单:

  1. 空字符串返回 0
  2. 单个数字返回它本身
  3. 两个逗号分隔的数字求和
  4. 任意多个数字求和
  5. 支持换行作为分隔符
  6. 负数抛出错误,错误信息列出所有负数

当前阶段:红

ts
import { describe, it, expect } from 'vitest'
import { add } from './calculator'

describe('add', () => {
  it('空字符串返回 0', () => {
    expect(add('')).toBe(0)
  })
})

预期失败原因:calculator 模块和 add 函数还不存在。请运行测试并把结果贴给我。

同款作品

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

做同款

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

Nathaniel 的更多内容

同主题

同模型

0 条评论

登录 后参与评论

还没有评论,来抢沙发~