跳到主要内容

测试代码审查标准

本文档定义了测试代码的审查标准,确保测试代码质量,提高测试的可维护性和可靠性。

审查标准

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