如何让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(预期通过)。
相关推荐
惊讶的猫7 小时前
意图识别置信度和检索重排的分数
java
明月_清风7 小时前
为什么最近开始关注 JEV?几个实战案例告诉你答案
人工智能·后端
qq_199886877 小时前
第6板块·第4节:构建系统与多文件项目
c++·人工智能·gpu算力
caoerzhong7 小时前
仓库管理数字化趋势解读:JeeWMS 开源 Java WMS 视角下的五个演进方向
java·开源
程序员JerrySUN7 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
冬奇Lab7 小时前
开源项目第222期:security-audit — Cloudflare 的安全审计 Skill,把 Coding Agent 变成六阶段安全审计器
人工智能·开源·资讯
卤煮最下饭8 小时前
在眼镜上背单词:一个 AIUI 对话式智能体的诞生
人工智能
Java后端的Ai之路8 小时前
Python进阶探索17 - Python中的深拷贝与浅拷贝
人工智能·python·ai·浅拷贝·深拷贝
知识分享小能手8 小时前
深度学习学习教程,从入门到精通,深度生成模型 —— 知识点详解与代码实现(20)
人工智能·深度学习·学习
杨杨杨大侠8 小时前
RAG 到底是怎么工作的?从用户提问到模型回答的完整链路
spring·openai·ai编程