You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.2 KiB
5.2 KiB
测试覆盖率文档
测试状态
已完成的测试
1. Connection 测试 (internal/connection/connection_test.go)
- ✅ ConnectionManager 基本功能测试
- ✅ 添加/获取/移除连接测试
- ✅ 最大连接数限制测试
- ✅ 连接分组测试
- ✅ 分组广播测试
- ✅ 非活动连接清理测试
- ✅ 错误处理测试(nil连接、不存在的连接等)
2. Context 测试 (test/context_test.go)
- ✅ Context 基本功能测试
- ✅ Set/Get/MustGet 测试
- ✅ GetString/GetInt/GetBool 测试
- ✅ 带超时的 Context 测试
- ✅ Context Value 方法测试
- ✅ Request 和 Response 访问测试
- ✅ Connection 访问测试
3. Unpacker 测试 (test/unpacker_test.go)
- ✅ DelimiterUnpacker 测试
- 单个消息拆包
- 多个消息拆包
- 不完整消息处理
- 打包功能
- ✅ LengthFieldUnpacker 测试
- 单个消息拆包
- 多个消息拆包
- 不完整消息处理
- 打包功能
- ✅ FixedLengthUnpacker 测试
- 单个消息拆包
- 多个消息拆包
- 不完整消息处理
- 打包功能(填充和截断)
- ✅ FrameHeaderUnpacker 测试
- 默认实现测试
- 自定义 GetLength 函数测试
- 打包功能
- ✅ 缓冲区大小限制测试
4. Router 测试 (test/router_test.go)
- ✅ StringMatcher 测试
- ✅ Router 注册测试
- ✅ Router 匹配测试
- ✅ Router 分组测试
- ✅ Router 选项测试(WithRequestType)
- ✅ 自定义匹配器测试
测试覆盖率目标
目标覆盖率:85%+
运行测试
运行所有测试
go test ./... -v
运行特定包的测试
# Connection 测试
go test ./internal/connection/... -v
# Context 测试
go test ./pkg/context/... -v
# Unpacker 测试
go test ./internal/unpacker/... -v
# Router 测试
go test ./internal/router/... -v
生成覆盖率报告
# 生成覆盖率文件
go test ./... -coverprofile=coverage.out
# 查看覆盖率报告
go tool cover -html=coverage.out
# 查看覆盖率百分比
go test ./... -cover
按包生成覆盖率报告
# Connection
go test ./internal/connection/... -coverprofile=coverage_connection.out
go tool cover -html=coverage_connection.out -o coverage_connection.html
# Context
go test ./pkg/context/... -coverprofile=coverage_context.out
go tool cover -html=coverage_context.out -o coverage_context.html
# Unpacker
go test ./internal/unpacker/... -coverprofile=coverage_unpacker.out
go tool cover -html=coverage_unpacker.out -o coverage_unpacker.html
# Router
go test ./internal/router/... -coverprofile=coverage_router.out
go tool cover -html=coverage_router.out -o coverage_router.html
待完成的测试
1. Server 测试
- Server 启动/停止测试
- Server 事件处理测试
- Server 连接管理测试
- Server 路由处理测试
- Server 错误处理测试
2. Codec 测试
- JSONCodec 测试
- BinaryCodec 测试
- MessagePackCodec 测试
- ProtobufCodec 测试
- Codec Registry 测试
3. Response 测试
- Response Write 测试
- Response WriteWithCodec 测试
- Response WriteBytes 测试
- Response WriteString 测试
- Response Header 测试
4. Request 测试
- Request Raw 测试
- Request Body 测试
- Request Bind 测试
- Request Header 测试
5. Protocol 测试
- NNET Protocol 测试
- Protocol Encode/Decode 测试
- Protocol FrameHeader 测试
6. 集成测试
- 端到端测试
- 并发测试
- 性能测试
- 压力测试
测试最佳实践
-
单元测试
- 每个函数都应该有对应的测试
- 测试应该覆盖正常情况和错误情况
- 使用表格驱动测试(Table-Driven Tests)
-
集成测试
- 测试组件之间的交互
- 使用真实的数据和场景
- 测试边界条件和错误处理
-
性能测试
- 使用
testing.B进行基准测试 - 测试并发性能
- 测试内存使用
- 使用
-
覆盖率
- 目标是 85%+ 的覆盖率
- 关注关键路径的覆盖率
- 使用覆盖率工具找出未测试的代码
测试文件组织
- 测试文件应该与源代码文件在同一包中
- 测试文件命名:
*_test.go - 测试函数命名:
Test* - 基准测试函数命名:
Benchmark* - 示例函数命名:
Example*
注意事项
-
Windows 环境问题
- 在某些 Windows 环境中可能会遇到测试执行问题
- 建议在 Linux 或 macOS 环境中运行测试
- 或者使用 WSL (Windows Subsystem for Linux)
-
测试数据
- 使用临时文件或内存数据
- 避免依赖外部资源
- 清理测试数据
-
并发测试
- 使用
sync.WaitGroup或chan进行同步 - 避免竞态条件
- 使用
go test -race检测竞态条件
- 使用
下一步
- 完成 Server 测试
- 完成 Codec 测试
- 完成 Response 和 Request 测试
- 完成 Protocol 测试
- 编写集成测试
- 达到 85%+ 覆盖率目标