路线阶段:AI Vibe Coding 第 6 章。
本章目标:让 AI 成为测试生产力,而不是只写业务代码。
学习目标
完成本章后,你应该能做到:
- 让 AI 按改动范围自动补测试。
- 系统化生成边界条件与异常路径样例。
- 将 AI 测试产出接入 CI 回归门禁。
- 用测试质量指标评估 AI 协同效果。
为什么测试是 Vibe Coding 的关键
如果 AI 只写功能不写测试,风险会快速累计:
- 变更速度越快,回归缺陷越多。
- 评审成本升高,发布变慢。
- 线上问题难复现,修复链路拉长。
正确做法:功能任务与测试任务同步生成、同步验收。
测试任务模板
[目标]
为“结算页升级路径”新增测试覆盖
[改动输入]
- 变更文件列表
- 关键分支逻辑
- 预期行为说明
[测试范围]
1. 正常路径
2. 边界路径
3. 异常路径
4. 回归保护
[输出]
- 测试文件
- 测试数据夹具
- 覆盖说明
AI 生成测试的四层结构
- Contract Tests:接口输入输出契约。
- Scenario Tests:业务场景路径。
- Boundary Tests:边界值与极端值。
- Regression Tests:历史缺陷复现保护。
示例:奖励发放幂等测试
[Test]
public void RewardGrant_Should_Be_Idempotent_By_RequestId()
{
var svc = BuildRewardService();
var req = new RewardRequest
{
PlayerId = "p1",
RequestId = "req-001",
RewardKey = "daily_signin"
};
var first = svc.TryGrant(req);
var second = svc.TryGrant(req);
Assert.IsTrue(first.Success);
Assert.IsFalse(second.Success);
Assert.AreEqual("duplicate_request", second.Reason);
}
边界样例生成策略
给 AI 明确边界维度:
- 数值边界:
0 / 1 / max / overflow - 时间边界:开始前、开始瞬间、结束瞬间、结束后
- 状态边界:未登录、已登录、封禁、灰度用户
- 并发边界:重复请求、乱序请求、超时重试
异常路径样例
要求 AI 默认补齐:
- 空输入
- 缺字段
- 外部依赖失败
- 重试与回退
测试夹具治理
public static class TestFixtures
{
public static StageResult BuildStageResult(bool win, int score)
{
return new StageResult
{
Win = win,
Score = score,
KillCount = 20,
DurationSec = 300
};
}
}
统一夹具可以减少重复样板代码,提高可维护性。
AI 测试输出验收标准
- 新增测试能在本地与 CI 稳定通过。
- 失败信息可定位具体业务分支。
- 测试命名表达行为,不写实现细节。
- 不引入随机与时间不确定性。
把 AI 测试接入 CI
建议门禁:
- 变更涉及高风险目录必须新增测试。
- 新增逻辑分支若无测试,PR 阻断。
- 历史高频缺陷路径必须有回归测试。
测试质量指标
每周追踪:
- AI 生成测试被保留率
- 测试误报率(Flaky)
- 覆盖关键模块比例
- 线上缺陷被测试提前拦截率
与现有流程联动
- 任务契约:每个功能任务附测试子任务。
- 代码评审:AI 先审测试缺口。
- 发布门禁:关键模块无测试不得发版。
- 技术债治理:优先补“无测试高风险模块”。
常见坑
坑 1:只追求覆盖率数字
覆盖率高不代表覆盖关键风险。
坑 2:测试依赖真实外部服务
应使用桩与模拟,保证稳定与可重复。
坑 3:AI 生成测试全是 happy path
必须强制要求边界和异常路径。
本月作业
建立“AI 测试补齐规则”:
- 选择 3 个高风险模块进行测试补齐。
- 每个模块至少新增 5 条边界/异常测试。
- 对比补齐前后的缺陷拦截效果。
下一章:AI Vibe Coding 07《重构协同:AI辅助分阶段重构与风险隔离》。