diff --git a/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md b/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md new file mode 100644 index 0000000..b90297d --- /dev/null +++ b/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md @@ -0,0 +1,819 @@ +# GFramework.Core 模块测试覆盖详细清单 + +> **生成日期**: 2026-01-16 +> **当前版本**: Core测试覆盖率 ~41% +> **目标**: 提升Core模块测试覆盖率至 85%+ + +--- + +## 📊 总体统计 + +| 类别 | 源文件数 | 有测试文件数 | 缺失测试文件数 | 测试覆盖率 | +|-----|---------|------------|--------------|----------| +| 架构系统 | 6 | 1 | 5 | 17% | +| 事件系统 | 7 | 4 | 3 | 57% | +| 命令系统 | 3 | 1 | 2 | 33% | +| 查询系统 | 3 | 1 | 2 | 33% | +| 日志系统 | 5 | 3 | 2 | 60% | +| 扩展方法 | 4 | 2 | 2 | 50% | +| 状态系统 | 4 | 2 | 2 | 50% | +| IOC容器 | 1 | 1 | 0 | 100% | +| 模型系统 | 1 | 0 | 1 | 0% | +| 系统基类 | 1 | 0 | 1 | 0% | +| 对象池 | 1 | 1 | 0 | 100% | +| 属性系统 | 2 | 1 | 1 | 50% | +| 工具类 | 1 | 0 | 1 | 0% | +| 环境系统 | 2 | 1 | 1 | 50% | +| 常量 | 1 | 0 | 1 | 0% | +| **总计** | **44** | **18** | **26** | **41%** | + +--- + +## 🎯 测试补充优先级概览 + +| 优先级 | 文件数 | 预计测试数 | 描述 | +|-------|-------|----------|------| +| 🔴 高优先级 | 10 | 99-124 | 核心功能和关键路径 | +| 🟡 中优先级 | 12 | 71-96 | 重要功能和扩展 | +| 🟢 低优先级 | 4 | 10-16 | 辅助功能和常量 | +| **总计** | **26** | **180-236** | - | + +--- + +## 🔴 高优先级 - 核心功能缺失测试(10个文件) + +### 1. ArchitectureConfigurationTests.cs + +**源文件路径**: `GFramework.Core/architecture/ArchitectureConfiguration.cs` + +**需要测试的内容**: +- ✅ 构造函数默认值 +- ✅ LoggerProperties 默认配置(ConsoleLoggerFactoryProvider + Info级别) +- ✅ ArchitectureProperties 默认配置(AllowLateRegistration=false, StrictPhaseValidation=true) +- ✅ 自定义配置替换 +- ✅ LoggerProperties 独立修改 +- ✅ ArchitectureProperties 独立修改 +- ✅ IArchitectureConfiguration 接口实现验证 + +**预计测试数**: 8-10 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/architecture/ArchitectureConfigurationTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 2. ArchitectureContextTests.cs + +**源文件路径**: `GFramework.Core/architecture/ArchitectureContext.cs` + +**需要测试的内容**: +- ✅ 构造函数参数验证(所有5个参数) +- ✅ 构造函数空参数异常 +- ✅ SendQuery 方法 - 正常查询发送 +- ✅ SendQuery 方法 - 空查询异常 +- ✅ SendCommand 方法 - 正常命令发送 +- ✅ SendCommand 方法 - 空命令异常 +- ✅ SendEvent 方法 - 正常事件发送 +- ✅ SendEvent 方法 - 空事件异常 +- ✅ GetSystem 方法 - 获取已注册系统 +- ✅ GetSystem 方法 - 获取未注册系统 +- ✅ GetModel 方法 - 获取已注册模型 +- ✅ GetModel 方法 - 获取未注册模型 +- ✅ GetUtility 方法 - 获取已注册工具 +- ✅ GetUtility 方法 - 获取未注册工具 +- ✅ RegisterSystem 方法 - 注册新系统 +- ✅ RegisterSystem 方法 - 重复注册 +- ✅ RegisterModel 方法 - 注册新模型 +- ✅ RegisterModel 方法 - 重复注册 +- ✅ RegisterUtility 方法 - 注册新工具 +- ✅ RegisterUtility 方法 - 重复注册 +- ✅ 上下文访问安全性验证 + +**预计测试数**: 15-20 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/architecture/ArchitectureContextTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 3. ArchitectureServicesTests.cs + +**源文件路径**: `GFramework.Core/architecture/ArchitectureServices.cs` + +**需要测试的内容**: +- ✅ 服务容器初始化 +- ✅ 所有服务实例创建(Container, EventBus, CommandBus, QueryBus) +- ✅ SetContext 方法 - 设置上下文 +- ✅ SetContext 方法 - 重复设置上下文 +- ✅ GetContext 方法 - 获取已设置上下文 +- ✅ GetContext 方法 - 未设置上下文时抛出异常 +- ✅ 上下文传播到容器 +- ✅ IArchitectureServices 接口实现验证 +- ✅ 服务独立性验证(多个实例) + +**预计测试数**: 10-12 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/architecture/ArchitectureServicesTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 4. ArchitectureEventsTests.cs + +**源文件路径**: `GFramework.Core/events/ArchitectureEvents.cs` + +**需要测试的内容**: +- ✅ ArchitectureLifecycleReadyEvent 事件触发 +- ✅ ArchitectureDestroyingEvent 事件触发 +- ✅ ArchitectureDestroyedEvent 事件触发 +- ✅ ArchitectureFailedInitializationEvent 事件触发 +- ✅ 事件的参数传递 +- ✅ 事件的订阅和取消订阅 +- ✅ 事件顺序验证(LifecycleReady -> Destroying -> Destroyed) + +**预计测试数**: 8-10 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/events/ArchitectureEventsTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 5. AbstractCommandTests.cs + +**源文件路径**: `GFramework.Core/command/AbstractCommand.cs` + +**需要测试的内容**: +- ✅ 抽象命令的基础实现 +- ✅ Execute 方法调用 +- ✅ Execute 方法的异常处理 +- ✅ 上下文感知功能(SetContext, GetContext) +- ✅ 日志功能(Logger属性) +- ✅ 子类继承行为验证 +- ✅ 命令执行前日志记录 +- ✅ 命令执行后日志记录 +- ✅ 错误情况下的日志记录 + +**预计测试数**: 8-10 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/command/AbstractCommandTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 6. AbstractQueryTests.cs + +**源文件路径**: `GFramework.Core/query/AbstractQuery.cs` + +**需要测试的内容**: +- ✅ 抽象查询的基础实现 +- ✅ Do 方法调用 +- ✅ Do 方法的异常处理 +- ✅ 上下文感知功能(SetContext, GetContext) +- ✅ 日志功能(Logger属性) +- ✅ 子类继承行为验证 +- ✅ 查询执行前日志记录 +- ✅ 查询执行后日志记录 +- ✅ 返回值类型验证 +- ✅ 错误情况下的日志记录 + +**预计测试数**: 8-10 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/query/AbstractQueryTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 7. AbstractLoggerTests.cs + +**源文件路径**: `GFramework.Core/logging/AbstractLogger.cs` + +**需要测试的内容**: +- ✅ 抽象日志器的基础实现 +- ✅ Trace 级别方法(所有重载) +- ✅ Debug 级别方法(所有重载) +- ✅ Info 级别方法(所有重载) +- ✅ Warn 级别方法(所有重载) +- ✅ Error 级别方法(所有重载) +- ✅ Fatal 级别方法(所有重载) +- ✅ IsTraceEnabled 方法 +- ✅ IsDebugEnabled 方法 +- ✅ IsInfoEnabled 方法 +- ✅ IsWarnEnabled 方法 +- ✅ IsErrorEnabled 方法 +- ✅ IsFatalEnabled 方法 +- ✅ IsEnabledForLevel 方法 +- ✅ Name 方法 +- ✅ 异常处理和日志记录 +- ✅ 格式化字符串处理 +- ✅ 子类继承行为验证 + +**预计测试数**: 12-15 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/logging/AbstractLoggerTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 8. ContextAwareStateMachineTests.cs + +**源文件路径**: `GFramework.Core/state/ContextAwareStateMachine.cs` + +**注意**: 此文件已创建但被删除,需要重新创建 + +**需要测试的内容**: +- ✅ 作为 ISystem 的集成测试 +- ✅ Init 方法 - 初始化上下文感知状态 +- ✅ Init 方法 - 设置Context属性 +- ✅ Destroy 方法 - 清理状态 +- ✅ OnArchitecturePhase 方法 - 接收架构阶段 +- ✅ 上下文感知状态初始化 +- ✅ 状态变更事件发送 +- ✅ SetContext 方法 +- ✅ GetContext 方法 +- ✅ ISystem 接口实现验证 +- ✅ 与 EventBus 的集成测试 +- ✅ 多状态注册和切换 +- ✅ 状态机生命周期完整性 + +**预计测试数**: 12-15 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/state/ContextAwareStateMachineTests.cs` + +**状态**: ⚠️ 需要重新创建 + +--- + +### 9. AbstractModelTests.cs + +**源文件路径**: `GFramework.Core/model/AbstractModel.cs` + +**需要测试的内容**: +- ✅ 抽象模型的基础实现 +- ✅ IModel 接口实现验证 +- ✅ Init 方法调用 +- ✅ Destroy 方法调用 +- ✅ 上下文感知功能(SetContext, GetContext) +- ✅ 日志功能(Logger属性) +- ✅ 子类继承行为验证 +- ✅ 模型初始化日志记录 +- ✅ 模型销毁日志记录 +- ✅ 模型生命周期完整性 + +**预计测试数**: 8-10 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/model/AbstractModelTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 10. AbstractSystemTests.cs + +**源文件路径**: `GFramework.Core/system/AbstractSystem.cs` + +**需要测试的内容**: +- ✅ 抽象系统的基础实现 +- ✅ ISystem 接口实现验证 +- ✅ Init 方法调用 +- ✅ Destroy 方法调用 +- ✅ 上下文感知功能(SetContext, GetContext) +- ✅ 日志功能(Logger属性) +- ✅ 架构阶段感知(OnArchitecturePhase) +- ✅ 子类继承行为验证 +- ✅ 系统初始化日志记录 +- ✅ 系统销毁日志记录 +- ✅ 架构阶段变化响应 +- ✅ 系统生命周期完整性 + +**预计测试数**: 10-12 个 + +**优先级**: 🔴 高 + +**创建路径**: `GFramework.Core.Tests/system/AbstractSystemTests.cs` + +**状态**: ❌ 待创建 + +--- + +## 🟡 中优先级 - 重要功能缺失测试(12个文件) + +### 11. AbstractObjectPoolSystemTests.cs + +**源文件路径**: `GFramework.Core/pool/AbstractObjectPoolSystem.cs` + +**当前状态**: ⚠️ 已有 ObjectPoolTests.cs,但可能需要补充抽象类的测试 + +**需要测试的内容**: +- ✅ 抽象对象池基类实现 +- ✅ IObjectPoolSystem 接口实现验证 +- ✅ GetObject 方法 - 获取对象 +- ✅ GetObject 方法 - 空池处理 +- ✅ ReturnObject 方法 - 返回对象 +- ✅ ReturnObject 方法 - 重复返回 +- ✅ 对象池容量管理 +- ✅ 对象复用逻辑 +- ✅ 对象池生命周期 +- ✅ 对象池扩容机制 + +**预计测试数**: 8-10 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/pool/AbstractObjectPoolSystemTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 12. DefaultUnRegisterTests.cs + +**源文件路径**: `GFramework.Core/events/DefaultUnRegister.cs` + +**需要测试的内容**: +- ✅ UnRegister 方法的实现 +- ✅ 事件订阅的取消 +- ✅ 资源清理 +- ✅ 多次调用UnRegister +- ✅ UnRegister后的事件处理 + +**预计测试数**: 4-6 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/events/DefaultUnRegisterTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 13. EasyEventGenericTests.cs + +**源文件路径**: `GFramework.Core/events/EasyEventGeneric.cs` + +**需要测试的内容**: +- ✅ 泛型事件的基本功能 +- ✅ 事件发送和接收 +- ✅ 订阅和取消订阅 +- ✅ 泛型类型约束 +- ✅ 不同泛型类型的独立性 +- ✅ 泛型事件的序列化(如果需要) + +**预计测试数**: 6-8 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/events/EasyEventGenericTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 14. ConsoleLoggerFactoryProviderTests.cs + +**源文件路径**: `GFramework.Core/logging/ConsoleLoggerFactoryProvider.cs` + +**需要测试的内容**: +- ✅ ConsoleLogger 创建 +- ✅ 最小日志级别设置 +- ✅ LoggerFactoryProvider 接口实现 +- ✅ 不同日志名称的Logger创建 +- ✅ Logger实例唯一性 + +**预计测试数**: 4-6 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/logging/ConsoleLoggerFactoryProviderTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 15. LoggerFactoryResolverTests.cs + +**源文件路径**: `GFramework.Core/logging/LoggerFactoryResolver.cs` + +**需要测试的内容**: +- ✅ 全局工厂提供程序设置 +- ✅ 获取默认提供程序 +- ✅ 空提供程序处理 +- ✅ 提供程序替换 +- ✅ 线程安全性 +- ✅ 多次设置提供程序 + +**预计测试数**: 5-8 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/logging/LoggerFactoryResolverTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 16. ContextAwareExtensionsTests.cs + +**源文件路径**: `GFramework.Core/extensions/ContextAwareExtensions.cs` + +**需要测试的内容**: +- ✅ GetContext 扩展方法 +- ✅ SetContext 扩展方法 +- ✅ GetLogger 扩展方法 +- ✅ GetContainer 扩展方法 +- ✅ GetEventBus 扩展方法 +- ✅ GetCommandBus 扩展方法 +- ✅ GetQueryBus 扩展方法 +- ✅ 扩展方法对null的处理 +- ✅ 多次调用扩展方法 + +**预计测试数**: 10-12 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/extensions/ContextAwareExtensionsTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 17. OrEventExtensionsTests.cs + +**源文件路径**: `GFramework.Core/extensions/OrEventExtensions.cs` + +**需要测试的内容**: +- ✅ Or 操作符重载 +- ✅ Or 事件创建 +- ✅ 事件组合逻辑 +- ✅ 多个事件合并 +- ✅ Or事件的订阅和取消订阅 +- ✅ Or事件的触发 + +**预计测试数**: 6-8 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/extensions/OrEventExtensionsTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 18. ContextAwareStateBaseTests.cs + +**源文件路径**: `GFramework.Core/state/ContextAwareStateBase.cs` + +**需要测试的内容**: +- ✅ 抽象状态基类实现 +- ✅ 上下文感知功能(SetContext, GetContext) +- ✅ 状态生命周期(OnEnter, OnExit) +- ✅ 日志功能(Logger属性) +- ✅ 子类继承行为 +- ✅ 状态转换规则 +- ✅ 状态生命周期完整性 + +**预计测试数**: 8-10 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/state/ContextAwareStateBaseTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 19. StateChangedEventTests.cs + +**源文件路径**: `GFramework.Core/state/StateChangedEvent.cs` + +**需要测试的内容**: +- ✅ OldState 属性设置和获取 +- ✅ NewState 属性设置和获取 +- ✅ 空状态处理 +- ✅ 事件的初始化 +- ✅ 事件的不可变性(如果适用) + +**预计测试数**: 4-6 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/state/StateChangedEventTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 20. AbstractContextUtilityTests.cs + +**源文件路径**: `GFramework.Core/utility/AbstractContextUtility.cs` + +**需要测试的内容**: +- ✅ 抽象工具类实现 +- ✅ IContextUtility 接口实现 +- ✅ Init 方法调用 +- ✅ 日志初始化 +- ✅ 上下文感知功能(SetContext, GetContext) +- ✅ 子类继承行为 +- ✅ 工具初始化日志记录 +- ✅ 工具生命周期完整性 + +**预计测试数**: 6-8 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/utility/AbstractContextUtilityTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 21. BindablePropertyUnRegisterTests.cs + +**源文件路径**: `GFramework.Core/property/BindablePropertyUnRegister.cs` + +**需要测试的内容**: +- ✅ 取消订阅功能 +- ✅ 资源清理 +- ✅ 与 BindableProperty 的集成 +- ✅ 多次取消订阅 +- ✅ 取消订阅后的属性变化 + +**预计测试数**: 4-6 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/property/BindablePropertyUnRegisterTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 22. DefaultEnvironmentTests.cs + +**源文件路径**: `GFramework.Core/environment/DefaultEnvironment.cs` + +**需要测试的内容**: +- ✅ 默认环境实现 +- ✅ 平台检测(Windows, Linux, Mac等) +- ✅ 环境变量访问 +- ✅ 运行时信息获取 +- ✅ IEnvironment 接口实现 +- ✅ 环境信息准确性 + +**预计测试数**: 6-8 个 + +**优先级**: 🟡 中 + +**创建路径**: `GFramework.Core.Tests/environment/DefaultEnvironmentTests.cs` + +**状态**: ❌ 待创建 + +--- + +## 🟢 低优先级 - 辅助功能缺失测试(4个文件) + +### 23. ArchitectureConstantsTests.cs + +**源文件路径**: `GFramework.Core/architecture/ArchitectureConstants.cs` + +**需要测试的内容**: +- ✅ 常量值的正确性 +- ✅ 常量类型验证 +- ✅ 常量可访问性 +- ✅ 常量命名规范 + +**预计测试数**: 3-5 个 + +**优先级**: 🟢 低 + +**创建路径**: `GFramework.Core.Tests/architecture/ArchitectureConstantsTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 24. EmptyCommandInputTests.cs + +**源文件路径**: `GFramework.Core/command/EmptyCommandInput.cs` + +**需要测试的内容**: +- ✅ 空命令输入的默认行为 +- ✅ ICommandInput 接口实现验证 +- ✅ 单例模式(如果适用) + +**预计测试数**: 2-3 个 + +**优先级**: 🟢 低 + +**创建路径**: `GFramework.Core.Tests/command/EmptyCommandInputTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 25. EmptyQueryInputTests.cs + +**源文件路径**: `GFramework.Core/query/EmptyQueryInput.cs` + +**需要测试的内容**: +- ✅ 空查询输入的默认行为 +- ✅ IQueryInput 接口实现验证 +- ✅ 单例模式(如果适用) + +**预计测试数**: 2-3 个 + +**优先级**: 🟢 低 + +**创建路径**: `GFramework.Core.Tests/query/EmptyQueryInputTests.cs` + +**状态**: ❌ 待创建 + +--- + +### 26. GFrameworkConstantsTests.cs + +**源文件路径**: `GFramework.Core/constants/GFrameworkConstants.cs` + +**需要测试的内容**: +- ✅ 版本号常量 +- ✅ 其他框架常量 +- ✅ 常量值正确性 +- ✅ 常量类型验证 +- ✅ 常量可访问性 + +**预计测试数**: 3-5 个 + +**优先级**: 🟢 低 + +**创建路径**: `GFramework.Core.Tests/constants/GFrameworkConstantsTests.cs` + +**状态**: ❌ 待创建 + +--- + +## 📋 详细执行计划 + +### 第一批:最关键(5个文件,预计 2-3 小时) + +| 序号 | 测试文件 | 预计测试数 | 优先级 | 预计时间 | +|-----|---------|----------|--------|---------| +| 1 | ArchitectureConfigurationTests.cs | 8-10 | 🔴 高 | 15分钟 | +| 2 | ArchitectureContextTests.cs | 15-20 | 🔴 高 | 40分钟 | +| 3 | ArchitectureServicesTests.cs | 10-12 | 🔴 高 | 25分钟 | +| 4 | ArchitectureEventsTests.cs | 8-10 | 🔴 高 | 20分钟 | +| 5 | ContextAwareStateMachineTests.cs | 12-15 | 🔴 高 | 30分钟 | + +**小计**: 53-67 个测试 + +--- + +### 第二批:重要基础类(5个文件,预计 2-3 小时) + +| 序号 | 测试文件 | 预计测试数 | 优先级 | 预计时间 | +|-----|---------|----------|--------|---------| +| 6 | AbstractCommandTests.cs | 8-10 | 🔴 高 | 25分钟 | +| 7 | AbstractQueryTests.cs | 8-10 | 🔴 高 | 25分钟 | +| 8 | AbstractLoggerTests.cs | 12-15 | 🔴 高 | 35分钟 | +| 9 | AbstractModelTests.cs | 8-10 | 🔴 高 | 20分钟 | +| 10 | AbstractSystemTests.cs | 10-12 | 🔴 高 | 25分钟 | + +**小计**: 46-57 个测试 + +--- + +### 第三批:扩展功能(8个文件,预计 2-3 小时) + +| 序号 | 测试文件 | 预计测试数 | 优先级 | 预计时间 | +|-----|---------|----------|--------|---------| +| 11 | AbstractObjectPoolSystemTests.cs | 8-10 | 🟡 中 | 20分钟 | +| 12 | DefaultUnRegisterTests.cs | 4-6 | 🟡 中 | 10分钟 | +| 13 | EasyEventGenericTests.cs | 6-8 | 🟡 中 | 15分钟 | +| 14 | ConsoleLoggerFactoryProviderTests.cs | 4-6 | 🟡 中 | 10分钟 | +| 15 | LoggerFactoryResolverTests.cs | 5-8 | 🟡 中 | 15分钟 | +| 16 | ContextAwareExtensionsTests.cs | 10-12 | 🟡 中 | 25分钟 | +| 17 | OrEventExtensionsTests.cs | 6-8 | 🟡 中 | 15分钟 | +| 18 | ContextAwareStateBaseTests.cs | 8-10 | 🟡 中 | 20分钟 | + +**小计**: 51-68 个测试 + +--- + +### 第四批:可选功能(10个文件,预计 1-2 小时) + +| 序号 | 测试文件 | 预计测试数 | 优先级 | 预计时间 | +|-----|---------|----------|--------|---------| +| 19 | StateChangedEventTests.cs | 4-6 | 🟡 中 | 10分钟 | +| 20 | AbstractContextUtilityTests.cs | 6-8 | 🟡 中 | 15分钟 | +| 21 | BindablePropertyUnRegisterTests.cs | 4-6 | 🟡 中 | 10分钟 | +| 22 | DefaultEnvironmentTests.cs | 6-8 | 🟡 中 | 15分钟 | +| 23 | ArchitectureConstantsTests.cs | 3-5 | 🟢 低 | 10分钟 | +| 24 | EmptyCommandInputTests.cs | 2-3 | 🟢 低 | 5分钟 | +| 25 | EmptyQueryInputTests.cs | 2-3 | 🟢 低 | 5分钟 | +| 26 | GFrameworkConstantsTests.cs | 3-5 | 🟢 低 | 10分钟 | + +**小计**: 30-44 个测试 + +--- + +## 📊 最终统计 + +| 批次 | 文件数 | 预计测试数 | 预计时间 | +|-----|-------|----------|---------| +| 第一批 | 5 | 53-67 | 2-3小时 | +| 第二批 | 5 | 46-57 | 2-3小时 | +| 第三批 | 8 | 51-68 | 2-3小时 | +| 第四批 | 8 | 30-44 | 1-2小时 | +| **总计** | **26** | **180-236** | **7-11小时** | + +--- + +## 🎯 目标达成路径 + +### 当前状态 +- **现有测试数**: 228 个 +- **测试覆盖率**: ~41% +- **缺失测试**: 180-236 个 + +### 第一批完成后 +- **预计测试数**: 228 + 53-67 = 281-295 个 +- **预计覆盖率**: ~50-55% + +### 第二批完成后 +- **预计测试数**: 281-295 + 46-57 = 327-352 个 +- **预计覆盖率**: ~60-65% + +### 第三批完成后 +- **预计测试数**: 327-352 + 51-68 = 378-420 个 +- **预计覆盖率**: ~70-75% + +### 第四批完成后 +- **预计测试数**: 378-420 + 30-44 = 408-464 个 +- **预计覆盖率**: ~75-80% + +--- + +## 📝 注意事项 + +### 测试隔离性 +1. ✅ 每个测试文件使用独立的测试辅助类(TestXxxV2, TestXxxV3等) +2. ✅ 避免与现有测试类(TestSystem, TestModel)命名冲突 +3. ✅ 使用 `[SetUp]` 和 `[TearDown]` 确保测试隔离 +4. ✅ 必要时使用 `[NonParallelizable]` 特性 + +### 测试命名规范 +- 测试类:`{Component}Tests` +- 测试方法:`{Scenario}_Should_{ExpectedOutcome}` +- 测试辅助类:`Test{Component}V{Version}` + +### 构建和验证流程 +1. 编写测试代码 +2. 运行 `dotnet build` 验证编译 +3. 运行 `dotnet test` 执行测试 +4. 检查测试通过率 +5. 修复失败或隔离性问题 + +--- + +## 🔄 更新日志 + +| 日期 | 操作 | 说明 | +|-----|------|------| +| 2026-01-16 | 初始创建 | 生成完整测试覆盖清单 | +| | | | + +--- + +## 📌 待确认事项 + +- [ ] 确认优先级划分是否合理 +- [ ] 确认执行计划是否可行 +- [ ] 确认测试用例数量估算是否准确 +- [ ] 确认测试隔离策略是否完整 + +--- + +**文档维护**: 请在完成每个测试文件后更新本文档的"状态"字段