测试代码审查标准
本文档定义了测试代码的审查标准,确保测试代码质量,提高测试的可维护性和可靠性。
审查标准
1. 测试覆盖率
注意: 覆盖率只统计单元测试(UT),集成测试(IT)和回归测试(RT)不计入覆盖率。
分层覆盖率标准
| 模块 | 最低 要求 | 理想目标 |
|---|---|---|
| 整体项目 | ≥ 70% | 80%+ |
| biz 层 | ≥ 80% | 90%+ |
| data 层 | ≥ 50% | 65%+ |
| service 层 | ≥ 60% | 75%+ |
| adapter / gateway | ≥ 70% | 85%+ |
| AI / Agent 模块 | ≥ 85% | 95%+ |
| 协议 Adapter | ≥ 70% | 85%+ |
核心业务覆盖率: 必须达到 90%+
整体覆盖率(项目级别)
- ✅ 通过: 覆盖率 ≥ 70%
- ⚠️ 警告: 覆盖率 60% - 70%
- ❌ 失败: 覆盖率 < 60%
核心业务覆盖率
- ✅ 通过: 覆盖率 ≥ 90%
- ⚠️ 警告: 覆盖率 85% - 90%
- ❌ 失败: 覆盖率 < 85%
分支覆盖率
- ✅ 通过: 覆盖率 ≥ 85%
- ⚠️ 警告: 覆盖率 75% - 85%
- ❌ 失败: 覆盖率 < 75%
语句覆盖率
- ✅ 通过: 覆盖率 ≥ 90%
- ⚠️ 警告: 覆盖率 80% - 90%
- ❌ 失败: 覆盖率 < 80%
检查方法
# 生成覆盖率报告
go test ./internal/service/... -coverprofile=coverage.out
# 查看覆盖率详情
go tool cover -func=coverage.out
# 生成HTML报告
go tool cover -html=coverage.out -o coverage.html
2. 测试完整性
每个接口必须包含以下测试场景:
- 成功场景
- 缺少必需参数
- 参数验证失败
- 数据库错误
- 资源不存在(如适用)
- 权限错误(如适 用)
- 空值边界
- 长度超限边界
3. 测试独立性
- 每个测试用例只测试一个功能点
- 测试用例之间相互独立,无依赖关系
- 测试可以独立执行
- 测试执行顺序不影响结果
4. 测试规范性
命名规范
- 测试文件命名正确(
*_test.go) - 测试用例命名符合规范(
Test<ServiceName>_<MethodName>_<Scenario>) - 测试场景命名清晰
Mock策略
- Gateway服务使用函数字段Mock
- 数据库服务使用sqlmock + Ent
- Mock对象与实际结构一致
- Mock数据包含所有字段
断言规范
- 使用testify的assert和require
- 关键断言使用require
- 普通断言使用assert
- 验证所有返回字段
审查检查清单
测试覆盖率检查
- 整体覆盖率 ≥ 70%
- biz 层覆盖率 ≥ 80%
- 核心业务覆盖率 ≥ 90%
- AI / Agent 模块覆盖率 ≥ 85%
- 分支覆盖率 ≥ 85%
- 覆盖率报告已生成
测试完整性检查
- 成功场景已测试
- 错误场景已测试
- 边界场景已测试
- 所有业务逻辑分支已覆盖
测试规范性检查
- 测试命名符合规范
- Mock策略正确
- 断言规范正确
- 错误处理完整
测试质量检查
- 测试独立性良好
- 测试可读性良好
- 测试可维护性良好
- 测试性能良好
代码风格检查
- 通过golangci-lint检查
- 代码格式正确
- 无代码异味
- 无安全漏洞
审查意见模板
通过
## ✅ 审查通过
### 测试覆盖率
- 整体覆盖率: 75% ✅
- biz 层覆盖率: 85% ✅
- 核心业务覆盖率: 92% ✅
- AI / Agent 模块覆盖率: 88% ✅
- 分支覆盖率: 88% ✅
### 测试质量
- 测试完整性: ✅
- 测试独立性: ✅
- 测试可读性: ✅
- 测试可维护性: ✅
### 总结
测试代码质量优秀,覆盖率达标,可以合并。
需要修改
## ⚠️ 需要修改
### 测试覆盖率
- 整体覆盖率: 65% ⚠️ (要求: ≥70%)
- biz 层覆盖率: 75% ⚠️ (要求: ≥80%)
- 核心业务覆盖率: 88% ⚠️ (要求: ≥90%)
- AI / Agent 模块覆盖率: 82% ⚠️ (要求: ≥85%)
- 分支覆盖率: 80% ⚠️ (要求: ≥85%)
### 需要改进的地方
1. **测试覆盖率不足**
- 缺少以下测试场景:
- [ ] UpdateAgent_NotFound
- [ ] DeleteAgent_PermissionDenied
2. **Mock数据不完整**
- Mock数据缺少 `IsActive` 字段
3. **断言不完整**
- 缺少 `CreatedAt` 和 `UpdatedAt` 字段验证
拒绝
## ❌ 审查拒绝
### 严重问题
1. **测试覆盖率严重不足**
- 当前覆盖率65%,需要达到70%
2. **测试质量严重不足**
- 测试用例之间有依赖关系
- 测试无法独立执行
3. **代码质量问题**
- 未通过golangci-lint检查
审查工具
自动检查工具
golangci-lint
# 运行golangci-lint
golangci-lint run
# 检查测试文件
golangci-lint run --tests=true
go test
# 运行测试
go test ./... -coverprofile=coverage.out
# 查看覆盖率详情
go tool cover -func=coverage.out
审查最佳实践
1. 及时审查
- 及时响应审查请求
- 在24小时内完成初步审查
- 提供明确的审查意见
2. 建设性反馈
- 提供具体的改进建议
- 解释为什么需要修改
- 提供修改示例
3. 关注重点
- 优先关注测试覆盖率
- 优先关注测试质量
- 优先关注核心业务逻辑
参考资料
最后更新: 2025-12-29