# GFramework.Core 模块测试覆盖详细清单 > **生成日期**: 2026-01-18 > **最后更新**: 2026-01-18 > **当前版本**: Core测试覆盖率 ~79.2% (文件级别) > **目标**: 提升Core模块测试覆盖率至 95%+ 并补充缺失的单元测试 --- ## 📊 总体统计 | 类别 | 源文件数 | 有测试文件数 | 缺失测试文件数 | 测试覆盖率 | |--------|--------|--------|---------|-----------| | 架构系统 | 6 | 4 | 1 | 83% | | 事件系统 | 8 | 5 | 0 | 100% | | 命令系统 | 4 | 1 | 3 | 25% | | 查询系统 | 5 | 1 | 3 | 20% | | 日志系统 | 5 | 2 | 0 | 100% | | 扩展方法 | 4 | 2 | 0 | 100% | | 状态系统 | 4 | 2 | 0 | 100% | | IOC容器 | 1 | 1 | 0 | 100% | | 模型系统 | 1 | 0 | 0 | 100% | | 系统基类 | 1 | 0 | 0 | 100% | | 对象池 | 1 | 1 | 0 | 100% | | 属性系统 | 2 | 1 | 0 | 100% | | 规则系统 | 1 | 0 | 0 | 100% | | 工具类 | 1 | 0 | 1 | 0% | | 环境系统 | 2 | 1 | 0 | 100% | | 常量 | 2 | 0 | 2 | 0% | | 协程系统 | 11 | 4 | 0 | 100% | | **总计** | **59** | **24** | **10** | **83.1%** | > **注**: 标记为0个测试文件的模块通过间接测试(集成测试)实现了功能覆盖 > **重要发现**: 命令系统和查询系统的异步功能完全缺失测试! --- ## 🎯 测试补充优先级概览 | 优先级 | 任务数 | 预计测试数 | 描述 | |---------|-------|-------------|-------------| | 🔴 高优先级 | 5 | 34-44 | 异步核心功能和工具基类 | | 🟡 中优先级 | 2 | 6-10 | 常量验证测试 | | ✅ 已完成 | 1 | 61 | 协程系统完整测试 | | **总计** | **7** | **101-115** | - | --- ## 📋 详细源文件与测试文件对应关系 ### Architecture 模块 (6个源文件) | 源文件 | 对应测试文件 | 测试覆盖 | |------------------------------|-----------------------------------------------------|---------| | Architecture.cs | SyncArchitectureTests.cs, AsyncArchitectureTests.cs | ✅ 98个测试 | | ArchitectureConfiguration.cs | ArchitectureConfigurationTests.cs | ✅ 12个测试 | | ArchitectureConstants.cs | **缺失** | ❌ 需补充 | | ArchitectureContext.cs | ArchitectureContextTests.cs | ✅ 22个测试 | | ArchitectureServices.cs | ArchitectureServicesTests.cs | ✅ 15个测试 | | GameContext.cs | GameContextTests.cs | ✅ 已有测试 | **测试用例总数**: 147个 --- ### Command 模块 (4个源文件) | 源文件 | 对应测试文件 | 测试覆盖 | |-----------------------------|-------------------------|------------| | **AbstractAsyncCommand.cs** | **缺失** | ❌ 需创建测试文件 | | AbstractCommand.cs | CommandBusTests.cs (间接) | ✅ 已覆盖 | | **CommandBus.cs** | CommandBusTests.cs | ⚠️ 需补充异步测试 | | EmptyCommandInput.cs | CommandBusTests.cs (间接) | ✅ 已覆盖 | **测试用例总数**: 4个(需补充异步测试) **需要补充**: 1. ❌ AbstractAsyncCommandTests.cs - 新建(高优先级) 2. ❌ CommandBusTests.cs - 补充 SendAsync 方法测试(高优先级) --- ### Query 模块 (5个源文件) | 源文件 | 对应测试文件 | 测试覆盖 | |---------------------------|-----------------------|-----------| | **AbstractAsyncQuery.cs** | **缺失** | ❌ 需创建测试文件 | | AbstractQuery.cs | QueryBusTests.cs (间接) | ✅ 已覆盖 | | **AsyncQueryBus.cs** | **缺失** | ❌ 需创建测试文件 | | EmptyQueryInput.cs | QueryBusTests.cs (间接) | ✅ 已覆盖 | | QueryBus.cs | QueryBusTests.cs | ✅ 3个测试 | **测试用例总数**: 3个(需补充异步测试) **需要补充**: 1. ❌ AbstractAsyncQueryTests.cs - 新建(高优先级) 2. ❌ AsyncQueryBusTests.cs - 新建(高优先级) --- ### Constants 模块 (2个源文件) | 源文件 | 对应测试文件 | 测试覆盖 | |--------------------------|--------|-------| | ArchitectureConstants.cs | **缺失** | ❌ 需补充 | | GFrameworkConstants.cs | **缺失** | ❌ 需补充 | **测试用例总数**: 0个 **需要补充**: 1. ❌ ArchitectureConstantsTests.cs - 新建(中优先级) 2. ❌ GFrameworkConstantsTests.cs - 新建(中优先级) --- ### Utility 模块 (1个源文件) | 源文件 | 对应测试文件 | 测试覆盖 | |---------------------------|--------|-----------| | AbstractContextUtility.cs | **缺失** | ❌ 需创建测试文件 | **测试用例总数**: 0个 **需要补充**: 1. ❌ AbstractContextUtilityTests.cs - 新建(高优先级) --- ### 协程系统 模块 (11个源文件) | 源文件 | 对应测试文件 | 测试覆盖 | |-----------------------|---------------------------------|---------| | CoroutineState.cs | CoroutineStateTests.cs | ✅ 2个测试 | | ITimeSource.cs | CoroutineSchedulerTests.cs (间接) | ✅ 已覆盖 | | IYieldInstruction.cs | YieldInstructionTests.cs (间接) | ✅ 已覆盖 | | CoroutineHandle.cs | CoroutineHandleTests.cs | ✅ 15个测试 | | CoroutineHelper.cs | CoroutineHelperTests.cs | ✅ 19个测试 | | CoroutineMetadata.cs | CoroutineSchedulerTests.cs (间接) | ✅ 已覆盖 | | CoroutineScheduler.cs | CoroutineSchedulerTests.cs | ✅ 25个测试 | | CoroutineSlot.cs | CoroutineSchedulerTests.cs (间接) | ✅ 已覆盖 | | Delay.cs | YieldInstructionTests.cs (间接) | ✅ 已覆盖 | | WaitForCoroutine.cs | YieldInstructionTests.cs (间接) | ✅ 已覆盖 | | WaitForFrames.cs | YieldInstructionTests.cs (间接) | ✅ 已覆盖 | | WaitOneFrame.cs | YieldInstructionTests.cs (间接) | ✅ 已覆盖 | | WaitUntil.cs | YieldInstructionTests.cs (间接) | ✅ 已覆盖 | | WaitWhile.cs | YieldInstructionTests.cs (间接) | ✅ 已覆盖 | **测试用例总数**: 61个 **需要补充**: 无需补充,协程系统测试覆盖率已达 100% --- ### 其他模块 (Events, Logging, IoC, etc.) 所有其他模块的测试覆盖率均达到 100%(包括间接测试覆盖),详见下文详细列表。 --- ## 🔴 高优先级 - 异步核心功能(5个任务) ### 任务1: CommandBusTests.cs - 补充异步测试 **源文件路径**: `GFramework.Core/command/CommandBus.cs` **优先级**: 🔴 高 **原因**: CommandBus 已实现 SendAsync 方法但没有任何测试 **需要补充的测试内容**: - ✅ SendAsync(IAsyncCommand) 方法 - 执行无返回值的异步命令 - ✅ SendAsync(IAsyncCommand) 方法 - 处理 null 异步命令 - ✅ SendAsync(IAsyncCommand) 方法 - 执行有返回值的异步命令 - ✅ SendAsync(IAsyncCommand) 方法 - 处理 null 异步命令 **预计测试数**: 4 个 **测试文件**: `GFramework.Core.Tests/command/CommandBusTests.cs` **操作**: 在现有测试文件中补充异步测试方法 **状态**: ❌ 待补充 --- ### 任务2: AbstractAsyncCommandTests.cs **源文件路径**: `GFramework.Core/command/AbstractAsyncCommand.cs` **优先级**: 🔴 高 **原因**: 异步命令基类没有任何单元测试,是核心功能 **需要测试的内容**: - ✅ 异步命令无返回值版本的基础实现 - ✅ 异步命令有返回值版本的基础实现 - ✅ ExecuteAsync 方法调用 - ✅ ExecuteAsync 方法的异常处理 - ✅ 上下文感知功能(SetContext, GetContext) - ✅ 日志功能(Logger属性) - ✅ 子类继承行为验证(两个版本) - ✅ 命令执行前日志记录 - ✅ 命令执行后日志记录 - ✅ 错误情况下的日志记录 **预计测试数**: 10-12 个 **创建路径**: `GFramework.Core.Tests/command/AbstractAsyncCommandTests.cs` **状态**: ❌ 待创建 --- ### 任务3: AsyncQueryBusTests.cs **源文件路径**: `GFramework.Core/query/AsyncQueryBus.cs` **优先级**: 🔴 高 **原因**: 异步查询总线是核心组件,需要完整的单元测试 **需要测试的内容**: - ✅ SendAsync 方法 - 正常查询发送 - ✅ SendAsync 方法 - 空查询异常 - ✅ 异步查询结果正确性 - ✅ 不同返回类型的异步查询支持 - ✅ 异步查询的异常处理 - ✅ 异步查询的上下文传递 **预计测试数**: 6-8 个 **创建路径**: `GFramework.Core.Tests/query/AsyncQueryBusTests.cs` **状态**: ❌ 待创建 --- ### 任务4: AbstractAsyncQueryTests.cs **源文件路径**: `GFramework.Core/query/AbstractAsyncQuery.cs` **优先级**: 🔴 高 **原因**: 异步查询基类没有任何单元测试,是核心功能 **需要测试的内容**: - ✅ 异步查询的基础实现 - ✅ DoAsync 方法调用 - ✅ DoAsync 方法的异常处理 - ✅ 上下文感知功能(SetContext, GetContext) - ✅ 日志功能(Logger属性) - ✅ 子类继承行为验证 - ✅ 查询执行前日志记录 - ✅ 查询执行后日志记录 - ✅ 返回值类型验证 - ✅ 错误情况下的日志记录 **预计测试数**: 8-10 个 **创建路径**: `GFramework.Core.Tests/query/AbstractAsyncQueryTests.cs` **状态**: ❌ 待创建 --- ### 任务5: AbstractContextUtilityTests.cs **源文件路径**: `GFramework.Core/utility/AbstractContextUtility.cs` **优先级**: 🔴 高 **原因**: 工具基类需要直接的单元测试以确保其基础功能正确性 **需要测试的内容**: - ✅ 抽象工具类实现 - ✅ IContextUtility 接口实现 - ✅ Init 方法调用 - ✅ 日志初始化 - ✅ 上下文感知功能(SetContext, GetContext) - ✅ 子类继承行为 - ✅ 工具初始化日志记录 - ✅ 工具生命周期完整性 **预计测试数**: 6-8 个 **创建路径**: `GFramework.Core.Tests/utility/AbstractContextUtilityTests.cs` **状态**: ❌ 待创建 --- ## 🟡 中优先级 - 常量验证(2个任务) ### 任务6: ArchitectureConstantsTests.cs **源文件路径**: `GFramework.Core/architecture/ArchitectureConstants.cs` **优先级**: 🟡 中 **原因**: 验证架构相关的常量定义是否正确 **需要测试的内容**: - ✅ 常量值的正确性 - ✅ 常量类型验证 - ✅ 常量可访问性 - ✅ 常量命名规范 - ✅ 架构阶段定义常量 **预计测试数**: 3-5 个 **创建路径**: `GFramework.Core.Tests/architecture/ArchitectureConstantsTests.cs` **状态**: ❌ 待创建 --- ### 任务7: GFrameworkConstantsTests.cs **源文件路径**: `GFramework.Core/constants/GFrameworkConstants.cs` **优先级**: 🟡 中 **原因**: 验证框架级别的常量定义 **需要测试的内容**: - ✅ 版本号常量格式正确性 - ✅ 其他框架常量 - ✅ 常量值正确性 - ✅ 常量类型验证 - ✅ 常量可访问性 **预计测试数**: 3-5 个 **创建路径**: `GFramework.Core.Tests/constants/GFrameworkConstantsTests.cs` **状态**: ❌ 待创建 --- ## 📊 测试执行计划 ### 第一批:异步核心功能(4个任务,预计 1.5小时) | 序号 | 测试任务 | 操作 | 预计测试数 | 优先级 | 预计时间 | |----|------------------------------|----|-------|------|------| | 1 | CommandBusTests.cs - 补充异步测试 | 补充 | 4 | 🔴 高 | 20分钟 | | 2 | AbstractAsyncCommandTests.cs | 新建 | 10-12 | 🔴 高 | 30分钟 | | 3 | AsyncQueryBusTests.cs | 新建 | 6-8 | 🔴 高 | 25分钟 | | 4 | AbstractAsyncQueryTests.cs | 新建 | 8-10 | 🔴 高 | 25分钟 | **小计**: 28-34 个测试,约 1.5小时 --- ### 第二批:工具基类(1个任务,预计 15分钟) | 序号 | 测试文件 | 操作 | 预计测试数 | 优先级 | 预计时间 | |----|--------------------------------|----|-------|------|------| | 5 | AbstractContextUtilityTests.cs | 新建 | 6-8 | 🔴 高 | 15分钟 | **小计**: 6-8 个测试 --- ### 第三批:常量验证(2个任务,预计 20分钟) | 序号 | 测试文件 | 操作 | 预计测试数 | 优先级 | 预计时间 | |----|-------------------------------|----|-------|------|------| | 6 | ArchitectureConstantsTests.cs | 新建 | 3-5 | 🟡 中 | 10分钟 | | 7 | GFrameworkConstantsTests.cs | 新建 | 3-5 | 🟡 中 | 10分钟 | **小计**: 6-10 个测试 --- ## 📊 最终统计 | 批次 | 任务数 | 操作 | 预计测试数 | 预计时间 | |----------|-------|-------------|-----------|---------| | 第一批(异步) | 4 | 3新建+1补充 | 28-34 | 1.5小时 | | 第二批(高优先) | 1 | 新建 | 6-8 | 15分钟 | | 第三批(中优先) | 2 | 新建 | 6-10 | 20分钟 | | **总计** | **7** | **6新建+1补充** | **40-54** | **2小时** | --- ## 🎯 目标达成路径 ### 当前状态(2026-01-18) - **现有测试数**: 496 个 - **文件覆盖率**: 79.2% (38/48个文件有测试覆盖) - **缺失测试**: 40-54 个 - **已完成文件**: 38/48 - **关键发现**: 异步命令和查询功能完全缺失测试 ### 协程模块新增后状态(2026-01-21) - **现有测试数**: 496 + 61 = 557 个 - **文件覆盖率**: 83.1% (49/59个文件有测试覆盖) - **协程模块测试**: 61 个(已完成) - **协程模块文件**: 11 个 - **关键发现**: 协程系统测试覆盖率已达 100% ### 补充测试完成后预计 - **预计测试数**: 557 + 40-54 = 597-611 个 - **预计文件覆盖率**: ~95% (56/59) - **代码行覆盖率**: 预计 90%+ (需通过覆盖率工具精确测量) --- ## 📝 注意事项 ### 注释规范 - ✅ 生成的测试类需要有注释说明这个测试类具体有哪些测试 - ✅ 测试方法需要有注释说明具体测试的是什么 - ✅ 对于复杂逻辑的测试方法,需要有标准的行注释说明逻辑,不要使用行尾注释 - ✅ 对于类与方法的测试,需要标准的C#文档注释 ### 测试隔离性 1. ✅ 每个测试文件使用独立的测试辅助类(TestXxxV2, TestXxxV3等) 2. ✅ 避免与现有测试类(TestSystem, TestModel)命名冲突 3. ✅ 使用 `[SetUp]` 和 `[TearDown]` 确保测试隔离 4. ✅ 必要时使用 `[NonParallelizable]` 特性 5. ✅ 异步测试需要正确使用 `async/await` 模式 ### 测试命名规范 - 测试类:`{Component}Tests` - 测试方法:`{Scenario}_Should_{ExpectedOutcome}` - 测试辅助类:`Test{Component}V{Version}` - 异步测试方法建议包含 `Async` 关键字 ### 构建和验证流程 1. 编写测试代码 2. 运行 `dotnet build` 验证编译 3. 运行 `dotnet test` 执行测试 4. 检查测试通过率 5. 修复失败或隔离性问题 ### 异步测试最佳实践 1. **正确使用 async/await** - 测试方法标记为 `async Task` - 所有异步操作使用 `await` - 不要使用 `.Result` 或 `.Wait()` 导致死锁 2. **异常测试** - 使用 `Assert.ThrowsAsync` 测试异步异常 - 确保异常在正确的位置抛出 3. **测试辅助类** - 创建模拟的异步命令/查询类 - 验证异步操作是否正确执行 - 测试并发场景(如需要) ### 代码覆盖率工具建议 建议添加 Coverlet 代码覆盖率工具以获得精确的覆盖率数据: ```xml all runtime; build; native; contentfiles; analyzers; buildtransitive ``` 运行覆盖率命令: ```bash dotnet test --collect:"XPlat Code Coverage" ``` --- ## 🔄 更新日志 | 日期 | 操作 | 说明 | |------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 2026-01-16 | 初始创建 | 生成原始测试覆盖清单(包含错误) | | 2026-01-18 | 全面更新(第1版) | 重新检查框架和测试,修正以下问题:
1. 删除不存在的ContextAwareStateMachineTests.cs
2. 更新实际测试数量为496个
3. 添加新增源文件
4. 修正文件覆盖率从41%提升至91.5%
5. 调整优先级,从26个减少到3个缺失测试文件 | | 2026-01-18 | 全面更新(第2版) | 补充异步命令和异步查询测试计划:
1. 发现CommandBus已有SendAsync实现但无测试
2. 发现AbstractAsyncCommand、AsyncQueryBus、AbstractAsyncQuery无测试
3. 新增4个高优先级异步测试任务
4. 更新文件覆盖率从91.5%调整为79.2%(补充异步后)
5. 总测试数从40-54调整为目标 | | 2026-01-21 | 协程模块测试完成 | 新增协程系统模块测试:
1. 新增协程源文件11个(GFramework.Core和GFramework.Core.Abstractions)
2. 创建协程测试文件4个,测试用例61个
3. 协程系统测试覆盖率达到100%
4. 更新文件覆盖率从79.2%提升至83.1%
5. 总测试数从496增加至557个 | --- ## 📌 待确认事项 - [x] 确认优先级划分是否合理 - [x] 确认执行计划是否可行 - [x] 确认测试用例数量估算是否准确 - [x] 确认测试隔离策略是否完整 - [ ] 添加代码覆盖率工具配置 - [ ] 确定是否需要补充间接测试为直接测试 --- ## 🎉 成就解锁 ### 已完成的测试覆盖 ✅ **架构系统核心功能** - 147个测试覆盖 ✅ **事件系统完整功能** - 37个测试覆盖 ✅ **日志系统完整功能** - 69个测试覆盖 ✅ **IoC容器** - 21个测试覆盖 ✅ **状态机系统** - 33个测试覆盖 ✅ **对象池系统** - 6个测试覆盖 ✅ **属性系统** - 8个测试覆盖 ✅ **扩展方法** - 17个测试覆盖 ✅ **同步命令查询系统** - 通过集成测试覆盖 ✅ **模型系统** - 通过架构集成测试覆盖 ✅ **系统基类** - 通过架构集成测试覆盖 ✅ **协程系统完整功能** - 61个测试覆盖 ### 待补充的异步功能 ❌ **异步命令系统** - AbstractAsyncCommand、CommandBus.SendAsync ❌ **异步查询系统** - AsyncQueryBus、AbstractAsyncQuery ❌ **工具基类** - AbstractContextUtility ❌ **常量验证** - ArchitectureConstants、GFrameworkConstants ### 测试质量指标 - **测试用例总数**: 557个 - **文件级别覆盖率**: 83.1% - **支持测试的.NET版本**: .NET 8.0, .NET 10.0 - **测试框架**: NUnit 3.x - **测试隔离性**: 良好 - **测试组织结构**: 清晰(按模块分类) --- ## 🚀 实施进度 ### 协程系统测试(已完成) - [x] 协程系统测试模块 (61个测试) - [x] CoroutineStateTests.cs (2个测试) - [x] CoroutineHandleTests.cs (15个测试) - [x] CoroutineHelperTests.cs (19个测试) - [x] YieldInstructionTests.cs (25个测试) - [x] CoroutineSchedulerTests.cs (25个测试,包含TestTimeSource辅助类) ### 第一批:异步核心功能 - [ ] 任务1: CommandBusTests.cs - 补充异步测试 (4个测试) - [ ] 任务2: AbstractAsyncCommandTests.cs (10-12个测试) - [ ] 任务3: AsyncQueryBusTests.cs (6-8个测试) - [ ] 任务4: AbstractAsyncQueryTests.cs (8-10个测试) ### 第二批:工具基类 - [ ] 任务5: AbstractContextUtilityTests.cs (6-8个测试) ### 第三批:常量验证 - [ ] 任务6: ArchitectureConstantsTests.cs (3-5个测试) - [ ] 任务7: GFrameworkConstantsTests.cs (3-5个测试) --- **文档维护**: 请在完成每个测试任务后更新本文档的状态和实施进度