mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 将 CurrentPhase 属性改为公共读取私有设置 - 在 Initialize 和 InitializeAsync 方法中添加异常处理机制 - 添加 ArchitectureFailedInitializationEvent 事件类型 - 定义架构阶段转换规则,支持失败初始化状态转换 - 添加 FailedInitialization 枚举值 - 在同步测试架构中添加后注册钩子功能 - 重构测试基类,移除重复的测试方法 - 添加架构初始化失败时的错误日志记录 - 实现初始化失败时自动进入 FailedInitialization 阶段
135 lines
4.2 KiB
C#
135 lines
4.2 KiB
C#
using GFramework.Core.Abstractions.enums;
|
|
using GFramework.Core.architecture;
|
|
using GFramework.Core.Tests.architecture;
|
|
using GFramework.Core.Tests.model;
|
|
using GFramework.Core.Tests.system;
|
|
using NUnit.Framework;
|
|
using NUnit.Framework.Legacy;
|
|
|
|
namespace GFramework.Core.Tests.tests;
|
|
|
|
/// <summary>
|
|
/// 同步架构测试类,用于测试同步架构的初始化、生命周期和组件注册等功能
|
|
/// </summary>
|
|
[TestFixture]
|
|
[NonParallelizable]
|
|
public class SyncArchitectureTests : ArchitectureTestsBase<SyncTestArchitecture>
|
|
{
|
|
protected override SyncTestArchitecture CreateArchitecture() => new();
|
|
|
|
/// <summary>
|
|
/// 测试架构是否正确初始化所有组件
|
|
/// 验证初始化调用、运行时状态、架构阶段和模型系统注册
|
|
/// </summary>
|
|
[Test]
|
|
public void Architecture_Should_Initialize_All_Components_Correctly()
|
|
{
|
|
// Act
|
|
Architecture!.Initialize();
|
|
|
|
// Assert
|
|
Assert.That(Architecture.InitCalled, Is.True);
|
|
|
|
Assert.That(Architecture.Runtime, Is.Not.Null);
|
|
|
|
var phase = Architecture.CurrentPhase;
|
|
Assert.That(phase, Is.EqualTo(ArchitecturePhase.Ready));
|
|
|
|
var context = Architecture.Context;
|
|
|
|
var model = context.GetModel<TestModel>();
|
|
Assert.That(model, Is.Not.Null);
|
|
Assert.That(model!.Initialized, Is.True);
|
|
|
|
var system = context.GetSystem<TestSystem>();
|
|
Assert.That(system, Is.Not.Null);
|
|
Assert.That(system!.Initialized, Is.True);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试架构是否按类型正确注册上下文
|
|
/// </summary>
|
|
[Test]
|
|
public void Architecture_Should_Register_Context_By_Type()
|
|
{
|
|
// Act
|
|
Architecture!.Initialize();
|
|
var ctx = GameContext.GetByType(Architecture!.GetType());
|
|
|
|
Assert.That(ctx, Is.Not.Null);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试架构是否按正确顺序进入各个阶段
|
|
/// 验证架构初始化过程中各阶段的执行顺序
|
|
/// </summary>
|
|
[Test]
|
|
public void Architecture_Should_Enter_Phases_In_Correct_Order()
|
|
{
|
|
Architecture!.Initialize();
|
|
|
|
var phases = Architecture.PhaseHistory;
|
|
|
|
CollectionAssert.AreEqual(
|
|
new[]
|
|
{
|
|
ArchitecturePhase.BeforeModelInit,
|
|
ArchitecturePhase.AfterModelInit,
|
|
ArchitecturePhase.BeforeSystemInit,
|
|
ArchitecturePhase.AfterSystemInit,
|
|
ArchitecturePhase.Ready
|
|
},
|
|
phases
|
|
);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试在架构就绪后注册系统是否抛出异常(当不允许时)
|
|
/// </summary>
|
|
[Test]
|
|
public void RegisterSystem_AfterReady_Should_Throw_When_NotAllowed()
|
|
{
|
|
Architecture!.Initialize();
|
|
|
|
Assert.Throws<InvalidOperationException>(() => { Architecture.RegisterSystem(new TestSystem()); });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试在架构就绪后注册模型是否抛出异常(当不允许时)
|
|
/// </summary>
|
|
[Test]
|
|
public void RegisterModel_AfterReady_Should_Throw_When_NotAllowed()
|
|
{
|
|
Architecture!.Initialize();
|
|
|
|
Assert.Throws<InvalidOperationException>(() => { Architecture.RegisterModel(new TestModel()); });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试架构销毁功能,验证销毁后系统被正确销毁且架构进入销毁阶段
|
|
/// </summary>
|
|
[Test]
|
|
public void Architecture_Destroy_Should_Destroy_All_Systems_And_Enter_Destroyed()
|
|
{
|
|
Architecture!.Initialize();
|
|
Architecture.Destroy();
|
|
|
|
var system = Architecture.Context.GetSystem<TestSystem>();
|
|
Assert.That(system!.DestroyCalled, Is.True);
|
|
|
|
var phase = Architecture.CurrentPhase;
|
|
Assert.That(phase, Is.EqualTo(ArchitecturePhase.Destroyed));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 测试当模型初始化失败时架构是否停止初始化
|
|
/// </summary>
|
|
[Test]
|
|
public void Architecture_Should_Stop_Initialization_When_Model_Init_Fails()
|
|
{
|
|
Architecture!.AddPostRegistrationHook(architecture => { architecture.RegisterModel(new FailingModel()); });
|
|
// 调用初始化
|
|
Architecture.Initialize();
|
|
Assert.That(Architecture.CurrentPhase, Is.EqualTo(ArchitecturePhase.FailedInitialization));
|
|
}
|
|
} |