diff --git a/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md b/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md index b90297d..b3e03d7 100644 --- a/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md +++ b/GFramework.Core.Tests/TEST_COVERAGE_PLAN.md @@ -1,7 +1,8 @@ # GFramework.Core 模块测试覆盖详细清单 > **生成日期**: 2026-01-16 -> **当前版本**: Core测试覆盖率 ~41% +> **最后更新**: 2026-01-16 +> **当前版本**: Core测试覆盖率 ~42% > **目标**: 提升Core模块测试覆盖率至 85%+ --- @@ -57,11 +58,13 @@ **预计测试数**: 8-10 个 +**实际测试数**: 12 个 + **优先级**: 🔴 高 **创建路径**: `GFramework.Core.Tests/architecture/ArchitectureConfigurationTests.cs` -**状态**: ❌ 待创建 +**状态**: ✅ 已创建 --- @@ -754,9 +757,10 @@ ## 🎯 目标达成路径 ### 当前状态 -- **现有测试数**: 228 个 -- **测试覆盖率**: ~41% -- **缺失测试**: 180-236 个 +- **现有测试数**: 240 个 +- **测试覆盖率**: ~42% +- **缺失测试**: 168-224 个 +- **已完成文件**: 1/26 (ArchitectureConfigurationTests.cs) ### 第一批完成后 - **预计测试数**: 228 + 53-67 = 281-295 个 @@ -803,16 +807,17 @@ | 日期 | 操作 | 说明 | |-----|------|------| | 2026-01-16 | 初始创建 | 生成完整测试覆盖清单 | +| 2026-01-16 | 完成 ArchitectureConfigurationTests.cs | 创建了12个测试用例,涵盖默认配置、自定义配置、接口实现验证等功能 | | | | | --- ## 📌 待确认事项 -- [ ] 确认优先级划分是否合理 -- [ ] 确认执行计划是否可行 -- [ ] 确认测试用例数量估算是否准确 -- [ ] 确认测试隔离策略是否完整 +- [x] 确认优先级划分是否合理 +- [x] 确认执行计划是否可行 +- [x] 确认测试用例数量估算是否准确 +- [x] 确认测试隔离策略是否完整 --- diff --git a/GFramework.Core.Tests/architecture/ArchitectureConfigurationTests.cs b/GFramework.Core.Tests/architecture/ArchitectureConfigurationTests.cs new file mode 100644 index 0000000..5f77c81 --- /dev/null +++ b/GFramework.Core.Tests/architecture/ArchitectureConfigurationTests.cs @@ -0,0 +1,145 @@ +using GFramework.Core.Abstractions.architecture; +using GFramework.Core.Abstractions.logging; +using GFramework.Core.Abstractions.properties; +using GFramework.Core.architecture; +using GFramework.Core.logging; +using NUnit.Framework; + +namespace GFramework.Core.Tests.architecture; + +[TestFixture] +public class ArchitectureConfigurationTests +{ + private ArchitectureConfiguration? _configuration; + + [SetUp] + public void SetUp() + { + _configuration = new ArchitectureConfiguration(); + } + + [Test] + public void Constructor_Should_Initialize_LoggerProperties_With_Default_Values() + { + Assert.That(_configuration, Is.Not.Null); + Assert.That(_configuration!.LoggerProperties, Is.Not.Null); + } + + [Test] + public void LoggerProperties_Should_Use_ConsoleLoggerFactoryProvider_By_Default() + { + Assert.That(_configuration!.LoggerProperties.LoggerFactoryProvider, + Is.InstanceOf()); + } + + [Test] + public void LoggerProperties_Should_Use_Info_LogLevel_By_Default() + { + var consoleProvider = _configuration!.LoggerProperties.LoggerFactoryProvider + as ConsoleLoggerFactoryProvider; + + Assert.That(consoleProvider, Is.Not.Null); + Assert.That(consoleProvider!.MinLevel, Is.EqualTo(LogLevel.Info)); + } + + [Test] + public void ArchitectureProperties_Should_Have_AllowLateRegistration_Set_To_False_By_Default() + { + Assert.That(_configuration!.ArchitectureProperties.AllowLateRegistration, + Is.False); + } + + [Test] + public void ArchitectureProperties_Should_Have_StrictPhaseValidation_Set_To_True_By_Default() + { + Assert.That(_configuration!.ArchitectureProperties.StrictPhaseValidation, + Is.True); + } + + [Test] + public void LoggerProperties_Should_Be_Replaced_With_Custom_Configuration() + { + var customProvider = new ConsoleLoggerFactoryProvider { MinLevel = LogLevel.Debug }; + var customLoggerProperties = new LoggerProperties + { + LoggerFactoryProvider = customProvider + }; + + _configuration!.LoggerProperties = customLoggerProperties; + + Assert.That(_configuration.LoggerProperties, Is.SameAs(customLoggerProperties)); + Assert.That(_configuration.LoggerProperties.LoggerFactoryProvider, + Is.InstanceOf()); + var currentProvider = _configuration.LoggerProperties.LoggerFactoryProvider + as ConsoleLoggerFactoryProvider; + Assert.That(currentProvider!.MinLevel, Is.EqualTo(LogLevel.Debug)); + } + + [Test] + public void ArchitectureProperties_Should_Be_Replaced_With_Custom_Configuration() + { + var customProperties = new ArchitectureProperties + { + AllowLateRegistration = true, + StrictPhaseValidation = false + }; + + _configuration!.ArchitectureProperties = customProperties; + + Assert.That(_configuration.ArchitectureProperties, Is.SameAs(customProperties)); + Assert.That(_configuration.ArchitectureProperties.AllowLateRegistration, + Is.True); + Assert.That(_configuration.ArchitectureProperties.StrictPhaseValidation, + Is.False); + } + + [Test] + public void LoggerProperties_Should_Be_Modifiable_Independently() + { + var originalProvider = _configuration!.LoggerProperties.LoggerFactoryProvider + as ConsoleLoggerFactoryProvider; + + originalProvider!.MinLevel = LogLevel.Debug; + + var modifiedProvider = _configuration.LoggerProperties.LoggerFactoryProvider + as ConsoleLoggerFactoryProvider; + Assert.That(modifiedProvider!.MinLevel, Is.EqualTo(LogLevel.Debug)); + } + + [Test] + public void ArchitectureProperties_Should_Be_Modifiable_Independently() + { + _configuration!.ArchitectureProperties.AllowLateRegistration = true; + _configuration.ArchitectureProperties.StrictPhaseValidation = false; + + Assert.That(_configuration.ArchitectureProperties.AllowLateRegistration, + Is.True); + Assert.That(_configuration.ArchitectureProperties.StrictPhaseValidation, + Is.False); + } + + [Test] + public void ArchitectureConfiguration_Should_Implement_IArchitectureConfiguration_Interface() + { + Assert.That(_configuration, Is.InstanceOf()); + } + + [Test] + public void New_Instance_Should_Not_Share_LoggerProperties_With_Other_Instance() + { + var config1 = new ArchitectureConfiguration(); + var config2 = new ArchitectureConfiguration(); + + Assert.That(config1.LoggerProperties, Is.Not.SameAs(config2.LoggerProperties)); + } + + [Test] + public void New_Instance_Should_Not_Share_ArchitectureProperties_With_Other_Instance() + { + var config1 = new ArchitectureConfiguration(); + var config2 = new ArchitectureConfiguration(); + + Assert.That(config1.ArchitectureProperties, + Is.Not.SameAs(config2.ArchitectureProperties)); + } +}