# 测试覆盖率文档 ## 测试状态 ### 已完成的测试 #### 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%+** ### 运行测试 #### 运行所有测试 ```bash go test ./... -v ``` #### 运行特定包的测试 ```bash # Connection 测试 go test ./internal/connection/... -v # Context 测试 go test ./pkg/context/... -v # Unpacker 测试 go test ./internal/unpacker/... -v # Router 测试 go test ./internal/router/... -v ``` #### 生成覆盖率报告 ```bash # 生成覆盖率文件 go test ./... -coverprofile=coverage.out # 查看覆盖率报告 go tool cover -html=coverage.out # 查看覆盖率百分比 go test ./... -cover ``` #### 按包生成覆盖率报告 ```bash # 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. 集成测试 - [ ] 端到端测试 - [ ] 并发测试 - [ ] 性能测试 - [ ] 压力测试 ### 测试最佳实践 1. **单元测试** - 每个函数都应该有对应的测试 - 测试应该覆盖正常情况和错误情况 - 使用表格驱动测试(Table-Driven Tests) 2. **集成测试** - 测试组件之间的交互 - 使用真实的数据和场景 - 测试边界条件和错误处理 3. **性能测试** - 使用 `testing.B` 进行基准测试 - 测试并发性能 - 测试内存使用 4. **覆盖率** - 目标是 85%+ 的覆盖率 - 关注关键路径的覆盖率 - 使用覆盖率工具找出未测试的代码 ### 测试文件组织 - 测试文件应该与源代码文件在同一包中 - 测试文件命名:`*_test.go` - 测试函数命名:`Test*` - 基准测试函数命名:`Benchmark*` - 示例函数命名:`Example*` ### 注意事项 1. **Windows 环境问题** - 在某些 Windows 环境中可能会遇到测试执行问题 - 建议在 Linux 或 macOS 环境中运行测试 - 或者使用 WSL (Windows Subsystem for Linux) 2. **测试数据** - 使用临时文件或内存数据 - 避免依赖外部资源 - 清理测试数据 3. **并发测试** - 使用 `sync.WaitGroup` 或 `chan` 进行同步 - 避免竞态条件 - 使用 `go test -race` 检测竞态条件 ### 下一步 1. 完成 Server 测试 2. 完成 Codec 测试 3. 完成 Response 和 Request 测试 4. 完成 Protocol 测试 5. 编写集成测试 6. 达到 85%+ 覆盖率目标 ### 参考资料 - [Go Testing Package](https://golang.org/pkg/testing/) - [Go Coverage Tool](https://blog.golang.org/cover) - [Table-Driven Tests](https://github.com/golang/go/wiki/TableDrivenTests) - [Advanced Testing in Go](https://about.sourcegraph.com/go/advanced-testing-in-go)