using GFramework.Core.Abstractions.logging; using GFramework.Core.Abstractions.rule; using GFramework.Core.Abstractions.utility; using GFramework.Core.architecture; using GFramework.Core.command; using GFramework.Core.environment; using GFramework.Core.events; using GFramework.Core.ioc; using GFramework.Core.query; using GFramework.Core.utility; using NUnit.Framework; namespace GFramework.Core.Tests.utility; /// /// AbstractContextUtility类的单元测试 /// 测试内容包括: /// - 抽象工具类实现 /// - IContextUtility接口实现 /// - Init方法调用 /// - 日志初始化 /// - 上下文感知功能(SetContext, GetContext) /// - 子类继承行为 /// - 工具初始化日志记录 /// - 工具生命周期完整性 /// [TestFixture] public class AbstractContextUtilityTests { [SetUp] public void SetUp() { _container = new IocContainer(); _container.RegisterPlurality(new EventBus()); _container.RegisterPlurality(new CommandExecutor()); _container.RegisterPlurality(new QueryExecutor()); _container.RegisterPlurality(new DefaultEnvironment()); _container.RegisterPlurality(new AsyncQueryExecutor()); _context = new ArchitectureContext(_container); } private ArchitectureContext _context = null!; private IocContainer _container = null!; /// /// 测试AbstractContextUtility实现IContextUtility接口 /// [Test] public void AbstractContextUtility_Should_Implement_IContextUtility_Interface() { var utility = new TestContextUtilityV1(); Assert.That(utility, Is.InstanceOf()); } /// /// 测试Init方法调用 /// [Test] public void Init_Should_Call_OnInit_Method() { var utility = new TestContextUtilityV1(); Assert.That(utility.Initialized, Is.False, "Utility should not be initialized before Init"); utility.Init(); Assert.That(utility.Initialized, Is.True, "Utility should be initialized after Init"); } /// /// 测试Init方法设置Logger属性 /// [Test] public void Init_Should_Set_Logger_Property() { var utility = new TestContextUtilityV1(); Assert.That(utility.GetLogger(), Is.Null, "Logger should be null before Init"); utility.Init(); Assert.That(utility.GetLogger(), Is.Not.Null, "Logger should be set after Init"); } /// /// 测试Init方法记录初始化日志 /// [Test] public void Init_Should_Log_Initialization() { var utility = new TestContextUtilityV1(); Assert.That(utility.InitCalled, Is.False, "InitCalled should be false before Init"); utility.Init(); Assert.That(utility.InitCalled, Is.True, "InitCalled should be true after Init"); } /// /// 测试Destroy方法调用 /// [Test] public void Destroy_Should_Call_OnDestroy_Method() { var utility = new TestContextUtilityV1(); utility.Init(); Assert.That(utility.Destroyed, Is.False, "Utility should not be destroyed before Destroy"); utility.Destroy(); Assert.That(utility.Destroyed, Is.True, "Utility should be destroyed after Destroy"); } /// /// 测试上下文感知功能 - SetContext方法 /// [Test] public void SetContext_Should_Set_Context_Property() { var utility = new TestContextUtilityV1(); var contextAware = (IContextAware)utility; contextAware.SetContext(_context); var context = contextAware.GetContext(); Assert.That(context, Is.SameAs(_context)); } /// /// 测试上下文感知功能 - GetContext方法 /// [Test] public void GetContext_Should_Return_Context_Property() { var utility = new TestContextUtilityV1(); var contextAware = (IContextAware)utility; contextAware.SetContext(_context); var context = contextAware.GetContext(); Assert.That(context, Is.Not.Null); Assert.That(context, Is.SameAs(_context)); } /// /// 测试子类继承行为 /// [Test] public void Child_Class_Should_Override_OnInit_Method() { var utility = new TestContextUtilityV2(); Assert.That(utility.Initialized, Is.False); Assert.That(utility.CustomInitializationDone, Is.False); utility.Init(); Assert.That(utility.Initialized, Is.True); Assert.That(utility.CustomInitializationDone, Is.True); } /// /// 测试工具生命周期完整性 /// [Test] public void ContextUtility_Should_Complete_Full_Lifecycle() { var utility = new TestContextUtilityV1(); // 初始状态 Assert.That(utility.Initialized, Is.False); Assert.That(utility.Destroyed, Is.False); // 初始化 utility.Init(); Assert.That(utility.Initialized, Is.True); Assert.That(utility.Destroyed, Is.False); // 销毁 utility.Destroy(); Assert.That(utility.Initialized, Is.True); Assert.That(utility.Destroyed, Is.True); } /// /// 测试工具类可以多次初始化和销毁 /// [Test] public void ContextUtility_Should_Be_Initializable_And_Destroyable_Multiple_Times() { var utility = new TestContextUtilityV1(); // 第一次初始化和销毁 utility.Init(); Assert.That(utility.Initialized, Is.True); utility.Destroy(); Assert.That(utility.Destroyed, Is.True); // 重置状态 utility.Destroyed = false; // 第二次初始化和销毁 utility.Init(); Assert.That(utility.Initialized, Is.True); utility.Destroy(); Assert.That(utility.Destroyed, Is.True); } } /// /// 测试用上下文工具类V1 /// public sealed class TestContextUtilityV1 : AbstractContextUtility { /// /// 获取工具是否已初始化 /// public bool Initialized { get; private set; } /// /// 获取工具是否已销毁 /// public bool Destroyed { get; set; } /// /// 获取Init方法是否被调用 /// public bool InitCalled { get; private set; } /// /// 获取Logger对象(用于测试) /// public ILogger? GetLogger() { return Logger; } /// /// 初始化方法 /// protected override void OnInit() { Initialized = true; InitCalled = true; } /// /// 销毁方法 /// protected override void OnDestroy() { Destroyed = true; } } /// /// 测试用上下文工具类V2,自定义初始化逻辑 /// public sealed class TestContextUtilityV2 : AbstractContextUtility { /// /// 获取工具是否已初始化 /// public bool Initialized { get; private set; } /// /// 获取工具是否已销毁 /// public bool Destroyed { get; set; } /// /// 获取自定义初始化是否完成 /// public bool CustomInitializationDone { get; private set; } /// /// 初始化方法(自定义逻辑) /// protected override void OnInit() { Initialized = true; CustomInitializationDone = true; } /// /// 销毁方法 /// protected override void OnDestroy() { Destroyed = true; } }