第45课:TDD 提示词工程
覆盖知识点:KP-224 ~ KP-225
在提示词中嵌入 TDD 规则
要让 AI 产出符合 TDD 规范的代码,必须在提示词中明确传达 TDD 的规则和约束。提示词就是你和 AI 之间的契约。
核心原则
| 原则 | 说明 | 提示词中的表达 |
|---|---|---|
| 先测试后代码 | AI 必须先生成测试,再生成实现 | ”请先为这个功能编写单元测试,再编写通过测试的实现代码” |
| 测试先行验证 | 实现代码必须通过已有测试 | ”生成的代码必须通过以下测试用例” |
| 可测试性设计 | 代码结构要为测试服务 | ”请设计可测试的接口和依赖注入” |
| 覆盖边界条件 | 测试必须考虑正常和异常路径 | ”请覆盖正常路径、边界条件和异常场景” |
系统提示词(System Prompt)模板
System Prompt 设计思路
System Prompt 是 AI 的”行为准则”,应在对话开始时设定,并在整个交互过程中持续生效。
通用 TDD 系统提示词模板
## 角色定位
你是一位严格遵守 TDD(测试驱动开发)的资深软件工程师。
## 开发流程
1. 在编写任何实现代码之前,先编写测试用例
2. 测试用例应覆盖:正常路径、边界条件、异常场景
3. 编写实现代码,确保所有测试通过
4. 在不破坏测试的前提下,对代码进行重构优化
## 工程约束
- 遵循项目的目录结构和命名规范
- 使用项目已有的测试框架和工具链
- 确保新增代码与现有代码风格一致
- 保持接口的向后兼容性
## 质量标准
- 测试代码质量与生产代码等同
- 每个测试用例独立可运行
- 测试命名清晰表达被测行为
- 遵循 AAA(Arrange-Act-Assert)模式
示例提示词
基础 TDD 提示词
请先为以下功能编写单元测试,再编写通过测试的实现代码:
功能描述:[在此描述功能需求]
技术栈:[JUnit 5 / Mockito / Spring Boot Test]
项目结构:[简要说明项目模块结构]
要求:
1. 先产出测试代码,再产出实现代码
2. 测试覆盖正常路径和异常路径
3. 实现代码需通过所有测试
分层测试提示词
请按照以下层次为 [功能名称] 编写测试和实现:
1. Controller 层测试 + 实现(验证 HTTP 接口行为)
2. Service 层测试 + 实现(验证业务逻辑)
3. Repository 层测试 + 实现(验证数据访问)
每层遵循:先写测试 → 再写实现 → 确保通过
工程结构信息的重要性
关键洞察
提示词中仅描述功能需求是不够的。AI 需要了解项目的工程结构和测试架构才能生成符合项目风格的代码。
应在提示词中包含的信息
| 信息类型 | 具体内容 | 作用 |
|---|---|---|
| 项目结构 | 模块划分、包名、目录层级 | AI 生成的文件路径正确 |
| 测试架构 | 测试框架版本、Mock 策略、断言库 | 测试代码风格一致 |
| 已有约定 | 命名规范、异常处理方式、返回类型 | 代码风格统一 |
| 数据库结构 | 表结构、字段定义、关联关系 | 测试数据准备准确 |
| 依赖注入 | Spring Bean 配置、构造注入方式 | Mock 注入方式正确 |
实战示例
项目信息:
- 框架:Spring Boot 3.2 + JUnit 5 + Mockito
- 目录结构:
src/main/java/com/example/order/
├── controller/OrderController.java
├── service/OrderService.java
├── repository/OrderRepository.java
└── model/Order.java
src/test/java/com/example/order/
├── controller/OrderControllerTest.java
└── service/OrderServiceTest.java
- 数据库表:orders(id, user_id, product_id, quantity, status, created_at)
- 规范:Controller 统一返回 Result<T>,Service 层使用 Optional 处理不存在情况
参见 AI+TDD 提示词模板 获取更完整的模板库。
本课小结
- 在提示词中嵌入 TDD 规则是 AI+TDD 协作的基础
- System Prompt 应作为行为准则贯穿始终
- 提示词应包含:先测试后代码 + 项目结构 + 测试架构 + 工程约定
- 工程结构信息决定了 AI 生成代码的适配程度
下一步:第46课:让 AI 一次性输出低错误率代码——AI 循环自测机制。