using GFramework.Core.events; using NUnit.Framework; namespace GFramework.Core.Tests.events; /// /// ArchitectureEvents类的单元测试 /// 测试内容包括: /// - ArchitectureLifecycleReadyEvent事件触发 /// - ArchitectureDestroyingEvent事件触发 /// - ArchitectureDestroyedEvent事件触发 /// - ArchitectureFailedInitializationEvent事件触发 /// - 事件的参数传递 /// - 事件的订阅和取消订阅 /// - 事件顺序验证(LifecycleReady -> Destroying -> Destroyed) /// [TestFixture] public class ArchitectureEventsTests { [SetUp] public void SetUp() { _eventBus = new EventBus(); } private EventBus? _eventBus; /// /// 测试ArchitectureLifecycleReadyEvent事件可以创建并发送 /// [Test] public void ArchitectureLifecycleReadyEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } /// /// 测试ArchitectureDestroyingEvent事件可以创建并发送 /// [Test] public void ArchitectureDestroyingEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } /// /// 测试ArchitectureDestroyedEvent事件可以创建并发送 /// [Test] public void ArchitectureDestroyedEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } /// /// 测试ArchitectureFailedInitializationEvent事件可以创建并发送 /// [Test] public void ArchitectureFailedInitializationEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } /// /// 测试事件按正确顺序发送 /// [Test] public void Events_Should_Be_Sent_In_Correct_Order() { var events = new List(); _eventBus!.Register(_ => events.Add("Ready")); _eventBus!.Register(_ => events.Add("Destroying")); _eventBus!.Register(_ => events.Add("Destroyed")); _eventBus.Send(); _eventBus.Send(); _eventBus.Send(); Assert.That(events.Count, Is.EqualTo(3)); Assert.That(events[0], Is.EqualTo("Ready")); Assert.That(events[1], Is.EqualTo("Destroying")); Assert.That(events[2], Is.EqualTo("Destroyed")); } /// /// 测试多个订阅者都能接收到事件 /// [Test] public void Multiple_Subscribers_Should_All_Receive_Events() { var count1 = 0; var count2 = 0; _eventBus!.Register(_ => count1++); _eventBus!.Register(_ => count2++); _eventBus.Send(); Assert.That(count1, Is.EqualTo(1)); Assert.That(count2, Is.EqualTo(1)); } /// /// 测试事件取消订阅后不再接收未来事件 /// [Test] public void Event_UnRegister_Should_Prevent_Future_Events() { var count = 0; var unregister = _eventBus!.Register(_ => count++); _eventBus.Send(); Assert.That(count, Is.EqualTo(1)); unregister.UnRegister(); _eventBus.Send(); Assert.That(count, Is.EqualTo(1)); } /// /// 测试不同类型事件互不干扰 /// [Test] public void Different_Events_Should_Not_Interfere() { bool readyReceived = false; bool destroyingReceived = false; _eventBus!.Register(_ => readyReceived = true); _eventBus!.Register(_ => destroyingReceived = true); _eventBus.Send(); Assert.That(readyReceived, Is.True); Assert.That(destroyingReceived, Is.False); _eventBus.Send(); Assert.That(destroyingReceived, Is.True); } /// /// 测试事件可以在没有订阅者时发送 /// [Test] public void Event_Can_Be_Sent_Without_Subscribers() { Assert.That(() => _eventBus!.Send(), Throws.Nothing); } }