如何让AI生成项目的单元测试,propmt技巧详解

比如你的项目是一个典型的 Java (Spring Boot) + Vue3 的前后端分离项目。

为了让 AI(无论是我、ChatGPT 还是其他代码模型)生成高质量的测试代码,你需要提供具体的上下文。AI 不能凭空猜你的数据库字段或接口参数。

以下是为你定制的 Prompt 模板 ,你可以直接复制使用。为了获得最佳效果,建议你分模块、分文件地向 AI 提问,而不是一次性丢给它整个项目。


🚀 通用 Prompt 结构(万能公式)

无论你让 AI 写哪种测试,Prompt 最好包含以下 4 个要素:

  1. 角色设定:告诉 AI 它是谁。
  2. 上下文:提供代码或文档片段(你已经上传了文档,这很好)。
  3. 具体任务:明确要生成什么。
  4. 输出要求:指定格式(如 JUnit 5、Mockito、JSON 等)。

🧪 场景一:生成后端单元测试 (Java)

适用对象 :你的 Service 层逻辑,比如 CertificateTimeRangeFilterService(时间筛选逻辑)或 CertificateGradeService(等级比较逻辑)。

你的输入 :复制粘贴具体的 Java 类或方法代码。

使用的 Prompt

角色:你是一个资深的 Java 架构师,擅长编写高质量的单元测试。

上下文

这是一个 Spring Boot 项目中的证书管理模块。这是 CertificateGradeService 的代码(或者粘贴具体的代码片段):
java

编辑

复制代码
1// 在这里粘贴你的 Java 代码,例如:
2public enum CertificateGrade { ... }
3public int compareCertificateGrades(String grade1, String grade2) { ... }

任务

请为这个类/方法生成 JUnit 5 单元测试用例。

要求

  1. 使用 @ExtendWith(MockitoExtension.class)
  2. 覆盖所有分支逻辑(例如:grade1 为空、grade2 为空、正常比较)。
  3. 使用 @ParameterizedTest@ValueSource / @CsvSource 来测试多种输入组合。
  4. 对于枚举类,测试所有枚举值的优先级排序是否正确。
  5. 断言要具体(使用 assertEquals, assertTrue 等)。

🐞 场景二:生成后端接口测试用例 (API Testing)

适用对象 :你的 Controller 层接口,比如 /project/certificate/list

你的输入 :提供 API 的定义或文档描述。

使用的 Prompt

角色:你是一个专业的后端测试工程师。

上下文

这是一个证书管理系统的 API 接口文档:

  • 接口GET /project/certificate/list
  • 功能:分页查询证书列表,支持按名称、类型、等级、时间范围筛选。
  • 参数pageNum, pageSize, certificateName (模糊查询), certificateType, dateFilterType (GENERAL/PATENT), validStartDate, validEndDate

任务

请设计一份详细的接口测试用例表,并生成对应的 JSON 格式的请求示例。

要求

  1. 正常场景:参数完整,查询有效数据。
  2. 边界值分析
    • pageNum = 0 或负数(预期:默认为1)
    • pageSize = 1(最小页)或 1000(最大页)
    • 时间范围:开始时间等于结束时间。
  3. 异常场景
    • 必填参数缺失(如不传 pageNum)。
    • 参数类型错误(如传字符串给 pageNum)。
    • 时间格式错误。
  4. 输出格式:Markdown 表格,包含"用例描述"、"请求参数"、"预期状态码"、"预期响应"。

🦋 场景三:生成前端单元测试 (Vue.js)

适用对象 :你的 Vue 组件逻辑,比如 index.vue 中的 calculateTableHeightgetDateFieldValue 方法。

你的输入 :复制粘贴 <script setup> 中的关键逻辑。

使用的 Prompt

角色:你是一个前端测试专家,精通 Vue Test Utils 和 Jest。

上下文

这是一个 Vue3 + Element Plus 的证书管理页面组件。这是 <script setup> 中的逻辑片段:
javascript

编辑

复制代码
1// 在这里粘贴你的 JS 逻辑,例如:
2const getDateFieldValue = (row) => { ... }
3const calculateTableHeight = () => { ... }

任务

请为这些函数/组件逻辑生成单元测试。

要求

  1. 使用 Jest 框架。
  2. 模拟 window.innerHeight 的不同值(例如 800px, 600px),测试 calculateTableHeight 是否正确计算了减去预留高度后的值。
  3. 测试 getDateFieldValue 在不同 queryParams.value.dateFilterType(PATENT, SOFTWARE_COPYRIGHT, GENERAL)下的返回值是否正确。
  4. 使用 describetest 块组织代码。

💡 给你的特别建议(基于你的文档)

根据你的《证书管理模块开发方案》,有几个逻辑复杂点特别适合让 AI 帮你写测试,因为这些地方容易出 Bug:

  1. 时间字段的动态筛选逻辑

    • 代码位置:CertificateTimeRangeFilterService 中的 getEffectiveDateField
    • 提示词重点 :请生成测试用例,验证当 dateFilterTypePATENT 时,SQL 条件是否正确指向 authorization_announce_date 字段;当为 GENERAL 时是否指向 expiry_date
  2. 证书等级的智能匹配

    • 代码位置:CertificateGradeService 中的 intelligentMatchGrade
    • 提示词重点 :请生成测试数据,输入包含"国家"、"national"、"国"、"省"、"市"等关键词的字符串,验证是否能正确匹配到 NATIONALPROVINCIAL 枚举。
  3. 文件类型验证

    • 代码位置:validateCertificateFile
    • 提示词重点 :请生成边界测试用例,例如上传 .exe 文件(预期拒绝)、超大尺寸文件(预期拒绝)、以及正常的 .pdf.jpg(预期通过)。
相关推荐
俊哥V1 小时前
每日 AI 研究简报 · 2026-06-05
人工智能·ai
Herlie1 小时前
2026小白做小红书封面AI工具指南:3款对比
人工智能
mit6.8241 小时前
Agent思维模式 | 评估
人工智能
lauo1 小时前
从0.04%到即插即用:RedSkill的种草困境与ibbot手机青春版的Token经济反击战
人工智能·智能手机
AI刀刀1 小时前
文心粘贴到 word 格式混乱,AI 导出鸭智能转文档零失真
人工智能·c#·word·ai导出鸭
老H科研技术1 小时前
第 02 篇:5 分钟搭建第一个 MCP 服务器
大数据·运维·服务器·人工智能·学习·aigc·ai编程
_日拱一卒1 小时前
LeetCode:17电话号码的字母组合
java·数据结构·算法·leetcode·职场和发展
jinxindeep1 小时前
世界模型:架构、方法、推理与应用全景综述
人工智能·架构·机器人
我是一颗柠檬1 小时前
【Java项目技术亮点】Outbox事件驱动模式:解决分布式事务的终极方案
java·开发语言·分布式·后端·中间件·kafka