测试编写
版本说明:本文基于 Claude Code(1.0.x)与 OpenCode 的测试生成实践撰写,适用于企业级开发团队。
技术栈版本:Java 17+、Spring Boot 3.x、JUnit 5(Jupiter)、Maven/Gradle、JaCoCo 覆盖率工具。
适用对象:中高级开发者、测试工程师、技术负责人。
前置知识:第18篇单服务编码。
一、AI辅助测试的完整流程
测试是 AI 编码工具投入产出比最高的环节之一。MorphLLM 的 2026 年分析指出,单元测试遵循高度结构化的模式——给定函数签名、实现和项目测试约定,测试结构基本可预测,这使得测试生成成为 AI 工具回报率最高的应用场景之一 。arXiv 2026 年的一项案例研究也表明,AI 辅助迭代生成测试能显著提升代码行为捕获能力,某商业 Web 应用通过 AI 工作流生成了约 16,000 行单元测试,使生产代码的依赖密度降低了 57.5% 。
但 AI 生成测试不是"给一段代码,拿一堆测试"。和编码一样,需要结构化的流程。
本文将 AI 辅助测试拆分为五个步骤:
分析测试场景 → 生成单元测试 → 生成集成测试 → 边界条件测试 → 运行并分析结果
用一个满减券的测试案例贯穿全文。
二、第一步:分析测试场景
不要直接让 AI 生成测试
很多人拿到一段代码就直接让 AI "帮我写测试"。这样做的问题是:AI 会生成一堆看似合理但缺乏针对性的测试用例,覆盖了显而易见的场景,遗漏了真正容易出 Bug 的地方。
正确的做法是先分析需要测试的场景,再让 AI 逐个生成。
场景分析的三个层次
| 层次 | 内容 | 示例(满减券) |
|---|---|---|
| 正常流程 | 标准业务流程 | 满 100 减 10,订单 150 元,减 10 |
| 异常分支 | 非法输入和异常情况 | 订单金额为 null、阈值为负数 |
| 边界条件 | 临界值和极端值 | 订单恰好 100 元、订单 99.99 元 |
让 AI 分析测试场景,它会输出类似这样的结果:
FullReduction.calculate() 测试场景分析:
正常流程:
1. 订单金额 >= 阈值,返回正确的减免金额
2. 订单金额满足多次满减(如满100减10,订单300元)
3. 订单金额恰好等于阈值
异常分支:
4. 订单金额为 null → 预期抛出 NullPointerException
5. 阈值为 null → 预期在构造时校验失败
6. 阈值为 0 或负数 → 预期在构造时校验失败
边界条件:
7. 订单金额 < 阈值(差 0.01)→ 返回 0
8. 订单金额 = 阈值 → 返回 discount
9. 订单金额极大值 → 验证精度不丢失
10. discount 为 0 → 返回 0
关键技巧: 把场景分析结果保存下来,作为后续生成测试用例的依据。这样可以确保每个场景都有对应的测试,不会遗漏。
三、第二步:生成单元测试
基于场景逐个生成
有了场景分析结果,让 AI 逐个生成测试用例。不要一次生成所有测试——逐个生成的好处是每个用例都有明确的意图,AI 不会"凑数"。
以满减券的正常流程测试为例:
扫码添加企业微信,找大熊掌门开通会员

添加后说明想开通的会员类型即可