本项目采用分层测试策略,将测试分为单元测试和集成测试两个层次。
test/
├── unit/ # 单元测试 - 不依赖外部环境
│ └── client_test.go
├── integration/ # 集成测试 - 需要外部API环境
│ ├── api_integration_test.go # 带构建标签的集成测试
│ └── api_integration_ide_test.go # IDE友好的集成测试
├── README.md # 本文档
└── IDE_TESTING_GUIDE.md # IDE测试运行指南
- 位置:
test/unit/ - 特点: 不依赖外部环境,使用mock服务器
- 覆盖范围:
- 客户端创建和配置
- API调用逻辑(使用httptest)
- 错误处理
- 认证机制
- 配置管理
- 位置:
test/integration/ - 特点: 测试与真实API的交互
- 文件类型:
oauth_integration_test.go- 带构建标签//go:build integration
- 覆盖范围:
- 完整的API请求流程
- 网络错误处理
- OAuth认证流程
- 配置集成
IDE用户注意: 如果在IDE中运行集成测试遇到构建标签问题,请参考 IDE测试运行指南
# 运行单元测试(默认)
make test
# 运行单元测试
make test-unit
# 运行集成测试
make test-integration
# 运行所有测试
make test-all
# 运行测试并生成覆盖率报告
make test-coverage
# 详细模式运行测试
make test-verbose# 运行单元测试(默认)
./scripts/test.sh
# 运行单元测试
./scripts/test.sh --unit-only
# 运行集成测试
./scripts/test.sh --integration-only
# 运行所有测试
./scripts/test.sh --all
# 详细模式
./scripts/test.sh --verbose
# 查看帮助
./scripts/test.sh --help# 运行单元测试
go test ./test/unit/...
# 运行集成测试(带构建标签)
go test -tags=integration ./test/integration/...
# 运行IDE版本的集成测试
go test ./test/integration/... -run ".*IDE.*"
# 运行所有测试(包括internal包)
go test ./...
# 生成覆盖率报告
go test -coverprofile=coverage.out ./test/unit/... ./internal/...
go tool cover -html=coverage.out -o coverage.html| 变量名 | 描述 | 默认值 | 必需 |
|---|---|---|---|
AGB_API_KEY |
AgbCloud API密钥 | - | 否 |
SKIP_INTEGRATION_TESTS |
跳过集成测试 | false | 否 |
# 设置API密钥(可选)
export AGB_API_KEY="your-api-key-here"
# 跳过集成测试
export SKIP_INTEGRATION_TESTS="true"
# 运行集成测试
make test-integration- 隔离性: 每个测试独立运行,不依赖其他测试
- 可重复性: 测试结果应该是确定的和可重复的
- 快速性: 单元测试应该快速执行
- 无外部依赖: 使用mock和stub替代外部服务
- 真实环境: 测试真实的API交互
- 容错性: 能够处理网络错误和API变更
- 可配置: 通过环境变量控制测试行为
- 文档化: 清楚说明测试的预期行为
项目目标是保持高测试覆盖率:
- 单元测试覆盖率: 目标 > 80%
- 关键路径覆盖: 100%
- 错误处理覆盖: 100%
查看覆盖率报告:
make test-coverage
open coverage.html # macOS
xdg-open coverage.html # Linux- 在
test/unit/目录下创建测试文件 - 使用
httptest创建mock服务器 - 测试所有成功和失败场景
- 确保测试不依赖外部环境
- 在
test/integration/目录下创建测试文件 - 添加构建标签
//go:build integration - 使用环境变量控制测试行为
- 处理网络错误和API不可用情况
在CI/CD流水线中:
# 示例GitHub Actions配置
- name: Run Unit Tests
run: make test-unit
- name: Run Integration Tests
run: make test-integration
env:
AGB_API_KEY: ${{ secrets.AGB_API_KEY }}
SKIP_INTEGRATION_TESTS: "false"-
集成测试失败
- 检查网络连接
- 验证API密钥设置
- 查看API服务状态
-
单元测试失败
- 检查mock服务器配置
- 验证测试数据
- 查看错误日志
-
覆盖率不足
- 添加边界条件测试
- 测试错误处理路径
- 增加负面测试用例
# 运行特定测试
go test -v ./test/unit/ -run TestSpecificFunction
# 启用详细输出
go test -v ./test/unit/...
# 运行测试并显示覆盖率
go test -v -cover ./test/unit/...