public void should_only_trigger_teardown_system_when_entity_loses_required_component() { var dummyGroup = new Group(typeof(TestComponentOne), typeof(TestComponentTwo)); var mockPoolManager = Substitute.For <IPoolManager>(); var pool = mockPoolManager.GetPool(); var mockEventSystem = Substitute.For <IEventSystem>(); var fakeSystem = Substitute.For <ITeardownSystem>(); fakeSystem.TargetGroup.Returns(dummyGroup); var systemExecutor = new SystemExecutor(mockPoolManager, mockEventSystem, null, null, null, null, null); systemExecutor.AddSystem(fakeSystem); var entity = new Entity(Guid.NewGuid(), pool, mockEventSystem); entity.AddComponent(new TestComponentOne()); entity.AddComponent(new TestComponentTwo()); // Should not trigger systemExecutor.OnEntityComponentRemoved(new ComponentRemovedEvent(entity, new TestComponentThree())); // Should trigger systemExecutor.OnEntityComponentRemoved(new ComponentRemovedEvent(entity, new TestComponentTwo())); fakeSystem.Received(1).Teardown(Arg.Is(entity)); }