GFramework/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md
GeWuYou faf860cc57 docs(tests): 添加测试覆盖计划文档和协程系统单元测试
- 新增 TEST_COVERAGE_PLAN.md 测试覆盖详细清单,包含总体统计和详细补全计划
- 添加 CoroutineHandleTests.cs 协程句柄单元测试,覆盖15个测试用例
- 添加 CoroutineHelperTests.cs 协程辅助方法单元测试,覆盖19个测试用例
- 添加 CoroutineSchedulerTests.cs 协程调度器单元测试,覆盖25个测试用例
- 完善协程系统测试覆盖至100%,提升整体文件覆盖率从79.2%至83.1%
- 建立协程系统测试执行计划和进度跟踪机制
2026-01-21 21:42:54 +08:00

20 KiB
Raw Blame History

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<T> 测试异步异常
    • 确保异常在正确的位置抛出
  3. 测试辅助类

    • 创建模拟的异步命令/查询类
    • 验证异步操作是否正确执行
    • 测试并发场景(如需要)

代码覆盖率工具建议

建议添加 Coverlet 代码覆盖率工具以获得精确的覆盖率数据:

<ItemGroup>
    <PackageReference Include="coverlet.collector" Version="6.0.0">
        <PrivateAssets>all</PrivateAssets>
        <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
</ItemGroup>

运行覆盖率命令:

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个

📌 待确认事项

  • 确认优先级划分是否合理
  • 确认执行计划是否可行
  • 确认测试用例数量估算是否准确
  • 确认测试隔离策略是否完整
  • 添加代码覆盖率工具配置
  • 确定是否需要补充间接测试为直接测试

🎉 成就解锁

已完成的测试覆盖

架构系统核心功能 - 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
  • 测试隔离性: 良好
  • 测试组织结构: 清晰(按模块分类)

🚀 实施进度

协程系统测试(已完成)

  • 协程系统测试模块 (61个测试)
    • CoroutineStateTests.cs (2个测试)
    • CoroutineHandleTests.cs (15个测试)
    • CoroutineHelperTests.cs (19个测试)
    • YieldInstructionTests.cs (25个测试)
    • 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个测试)

文档维护: 请在完成每个测试任务后更新本文档的状态和实施进度