第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 循环自测机制。