GFramework/GFramework.Ecs.Arch.Tests/integration/ExplicitRegistrationTests.cs
GeWuYou 5c5525e3e9 refactor(architecture): 简化模块注册接口并增强配置管理
- 移除 RegisterBuiltInModules 方法中的 ArchitectureProperties 参数
- 更新 ArchitectureModuleRegistry 使用 ConcurrentDictionary 存储模块工厂
- 实现模块注册的幂等性检查,相同模块名只注册一次
- 为 ArchEcsModule 添加 ArchOptions 配置类支持
- 更新 UseArch 扩展方法传递配置选项给 ArchEcsModule
- 移除废弃的 properties 命名空间引用
- 添加显式注册集成测试验证模块配置功能
2026-03-08 20:47:26 +08:00

135 lines
3.6 KiB
C#

using Arch.Core;
using GFramework.Core.Abstractions.architecture;
using GFramework.Core.architecture;
using GFramework.Core.ioc;
using GFramework.Ecs.Arch.Abstractions;
using GFramework.Ecs.Arch.extensions;
namespace GFramework.Ecs.Arch.Tests.integration;
/// <summary>
/// 显式注册集成测试
/// </summary>
[TestFixture]
public class ExplicitRegistrationTests
{
[SetUp]
public void Setup()
{
_container = new MicrosoftDiContainer();
_context = new ArchitectureContext(_container);
// 清空注册表,确保测试隔离
ArchitectureModuleRegistry.Clear();
}
[TearDown]
public void TearDown()
{
_container?.Clear();
_context = null;
ArchitectureModuleRegistry.Clear();
GameContext.Clear();
}
private MicrosoftDiContainer? _container;
private ArchitectureContext? _context;
/// <summary>
/// 测试 Arch ECS 模块显式注册
/// </summary>
[Test]
public void ArchEcsModule_Should_Be_Explicitly_Registered()
{
// Arrange
var architecture = new TestArchitecture();
// Act - 显式注册
architecture.UseArch();
architecture.Initialize();
// Assert - 验证 World 已注册(由 ArchEcsModule 注册)
var world = architecture.Context.GetService<World>();
Assert.That(world, Is.Not.Null, "World should be registered by ArchEcsModule");
// 验证 IArchEcsModule 已注册
var ecsModule = architecture.Context.GetService<IArchEcsModule>();
Assert.That(ecsModule, Is.Not.Null, "IArchEcsModule should be registered");
}
/// <summary>
/// 测试 World 是否正确注册到容器
/// </summary>
[Test]
public void World_Should_Be_Registered_In_Container()
{
// Arrange
var architecture = new TestArchitecture();
// Act - 显式注册
architecture.UseArch();
architecture.Initialize();
// Assert
var world = architecture.Context.GetService<World>();
Assert.That(world, Is.Not.Null, "World should be registered in container");
}
/// <summary>
/// 测试带配置的注册
/// </summary>
[Test]
public void UseArch_Should_Accept_Configuration()
{
// Arrange
var architecture = new TestArchitecture();
var configCalled = false;
// Act
architecture.UseArch(options =>
{
options.WorldCapacity = 2000;
options.EnableStatistics = true;
configCalled = true;
});
// Assert
Assert.That(configCalled, Is.True, "Configuration delegate should be called");
}
/// <summary>
/// 测试链式调用
/// </summary>
[Test]
public void UseArch_Should_Support_Chaining()
{
// Arrange & Act
var architecture = new TestArchitecture()
.UseArch()
.UseArch(options => options.WorldCapacity = 2000);
architecture.Initialize();
// Assert - 验证模块已注册
var world = architecture.Context.GetService<World>();
Assert.That(world, Is.Not.Null, "World should be registered");
var ecsModule = architecture.Context.GetService<IArchEcsModule>();
Assert.That(ecsModule, Is.Not.Null, "IArchEcsModule should be registered");
}
/// <summary>
/// 测试架构类,用于测试
/// </summary>
private class TestArchitecture : Architecture
{
public TestArchitecture() : base(new ArchitectureConfiguration())
{
}
protected override void OnInitialize()
{
// 测试架构,无需额外初始化
}
}
}