mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-03-22 10:34:30 +08:00
- 在 ArchitectureContext 中添加 GetServices、GetSystems、GetModels 和 GetUtilities 方法 - 扩展 IArchitectureContext 接口以支持批量获取各类组件实例 - 在测试类中实现相应的批量获取功能 - 将原有的 ContextAwareExtensions 拆分为多个专门的扩展类文件 - 新增 ContextAwareCommandExtensions、ContextAwareEnvironmentExtensions 和 ContextAwareEventExtensions 等扩展类 - 提供了更完善的架构上下文组件访问能力
128 lines
3.3 KiB
C#
128 lines
3.3 KiB
C#
using GFramework.Core.Abstractions.events;
|
|
using GFramework.Core.Abstractions.rule;
|
|
using GFramework.Core.architecture;
|
|
using GFramework.Core.events;
|
|
using GFramework.Core.extensions;
|
|
using GFramework.Core.ioc;
|
|
using GFramework.Core.rule;
|
|
using NUnit.Framework;
|
|
|
|
namespace GFramework.Core.Tests.rule;
|
|
|
|
/// <summary>
|
|
/// 测试 ContextAwareEventExtensions 的单元测试类
|
|
/// 验证事件发送、注册和取消注册功能
|
|
/// </summary>
|
|
[TestFixture]
|
|
public class ContextAwareEventExtensionsTests
|
|
{
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
_container = new MicrosoftDiContainer();
|
|
_eventBus = new EventBus();
|
|
_container.Register<IEventBus>(_eventBus);
|
|
_context = new ArchitectureContext(_container);
|
|
_contextAware = new TestContextAware();
|
|
|
|
((IContextAware)_contextAware).SetContext(_context);
|
|
_container.Freeze();
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
_container.Clear();
|
|
}
|
|
|
|
private TestContextAware _contextAware = null!;
|
|
private ArchitectureContext _context = null!;
|
|
private MicrosoftDiContainer _container = null!;
|
|
private EventBus _eventBus = null!;
|
|
|
|
[Test]
|
|
public void SendEvent_Should_Trigger_Registered_Handler()
|
|
{
|
|
// Arrange
|
|
var eventReceived = false;
|
|
_contextAware.RegisterEvent<TestEvent>(_ => eventReceived = true);
|
|
|
|
// Act
|
|
_contextAware.SendEvent(new TestEvent());
|
|
|
|
// Assert
|
|
Assert.That(eventReceived, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void SendEvent_WithNew_Should_Create_And_Send_Event()
|
|
{
|
|
// Arrange
|
|
var eventReceived = false;
|
|
_contextAware.RegisterEvent<TestEventWithDefaultConstructor>(_ => eventReceived = true);
|
|
|
|
// Act
|
|
_contextAware.SendEvent<TestEventWithDefaultConstructor>();
|
|
|
|
// Assert
|
|
Assert.That(eventReceived, Is.True);
|
|
}
|
|
|
|
[Test]
|
|
public void RegisterEvent_Should_Return_UnRegister_Interface()
|
|
{
|
|
// Act
|
|
var unRegister = _contextAware.RegisterEvent<TestEvent>(_ => { });
|
|
|
|
// Assert
|
|
Assert.That(unRegister, Is.Not.Null);
|
|
Assert.That(unRegister, Is.InstanceOf<IUnRegister>());
|
|
}
|
|
|
|
[Test]
|
|
public void UnRegisterEvent_Should_Stop_Receiving_Events()
|
|
{
|
|
// Arrange
|
|
var eventCount = 0;
|
|
void Handler(TestEvent e) => eventCount++;
|
|
|
|
_contextAware.RegisterEvent<TestEvent>(Handler);
|
|
_contextAware.SendEvent(new TestEvent());
|
|
|
|
// Act
|
|
_contextAware.UnRegisterEvent<TestEvent>(Handler);
|
|
_contextAware.SendEvent(new TestEvent());
|
|
|
|
// Assert
|
|
Assert.That(eventCount, Is.EqualTo(1));
|
|
}
|
|
|
|
[Test]
|
|
public void SendEvent_Should_Pass_Event_Data()
|
|
{
|
|
// Arrange
|
|
TestEvent? receivedEvent = null;
|
|
_contextAware.RegisterEvent<TestEvent>(e => receivedEvent = e);
|
|
var sentEvent = new TestEvent { Data = "TestData" };
|
|
|
|
// Act
|
|
_contextAware.SendEvent(sentEvent);
|
|
|
|
// Assert
|
|
Assert.That(receivedEvent, Is.Not.Null);
|
|
Assert.That(receivedEvent!.Data, Is.EqualTo("TestData"));
|
|
}
|
|
|
|
private class TestEvent
|
|
{
|
|
public string Data { get; set; } = string.Empty;
|
|
}
|
|
|
|
private class TestEventWithDefaultConstructor
|
|
{
|
|
}
|
|
|
|
private class TestContextAware : ContextAwareBase
|
|
{
|
|
}
|
|
} |