public void should_effect_correct_setup_systems_once() { var dummyGroup = new Group(typeof(TestComponentOne), typeof(TestComponentTwo)); var mockPoolManager = Substitute.For <IPoolManager>(); var pool = mockPoolManager.GetPool(); var mockEventSystem = Substitute.For <IEventSystem>(); var mockSetupSystemHandler = Substitute.For <ISetupSystemHandler>(); var fakeSystem = Substitute.For <ISetupSystem>(); fakeSystem.TargetGroup.Returns(dummyGroup); var systemExecutor = new SystemExecutor(mockPoolManager, mockEventSystem, null, null, mockSetupSystemHandler, null, null); systemExecutor.AddSystem(fakeSystem); var entity = new Entity(Guid.NewGuid(), pool, mockEventSystem); entity.AddComponent(new TestComponentOne()); systemExecutor.OnEntityComponentAdded(new ComponentAddedEvent(entity, new TestComponentOne())); entity.AddComponent(new TestComponentTwo()); systemExecutor.OnEntityComponentAdded(new ComponentAddedEvent(entity, new TestComponentTwo())); entity.AddComponent(new TestComponentThree()); systemExecutor.OnEntityComponentAdded(new ComponentAddedEvent(entity, new TestComponentThree())); mockSetupSystemHandler.Received(1).ProcessEntity(Arg.Is(fakeSystem), Arg.Is(entity)); }