修复 Components 和 Scene 模块测试问题

1. GameObject 析构函数:从全局注册表移除自己,防止悬挂指针
2. SceneManager 测试:事件订阅后正确 Unsubscribe,防止 lambda 销毁后悬挂调用
3. SceneManager 测试:使用唯一场景名称避免覆盖问题
This commit is contained in:
2026-03-22 02:10:32 +08:00
parent 1358bb0a5a
commit 3357de85c9
2 changed files with 10 additions and 7 deletions

View File

@@ -60,14 +60,14 @@ TEST(SceneManager_Test, GetScene_NotExists) {
TEST_F(SceneManagerTest, GetAllScenes_ReturnsAll) {
SceneManager& sm = SceneManager::Get();
size_t initialCount = sm.GetAllScenes().size();
sm.CreateScene("Scene1");
sm.CreateScene("Scene2");
sm.CreateScene("Scene3");
size_t beforeCount = sm.GetAllScenes().size();
sm.CreateScene("GetAllScenes_TestScene1");
sm.CreateScene("GetAllScenes_TestScene2");
sm.CreateScene("GetAllScenes_TestScene3");
auto scenes = sm.GetAllScenes();
EXPECT_EQ(scenes.size(), initialCount + 3);
EXPECT_EQ(scenes.size(), beforeCount + 3);
}
TEST(SceneManager_Test, SetActiveScene) {
@@ -123,13 +123,14 @@ TEST(SceneManager_Test, UnloadScene_ByName) {
TEST(SceneManager_Test, OnSceneLoaded_Event) {
SceneManager& sm = SceneManager::Get();
bool eventFired = false;
sm.OnSceneLoaded().Subscribe([&eventFired](Scene*) {
uint64_t subId = sm.OnSceneLoaded().Subscribe([&eventFired](Scene*) {
eventFired = true;
});
sm.CreateScene("TestScene");
EXPECT_TRUE(eventFired);
sm.OnSceneLoaded().Unsubscribe(subId);
}
TEST(SceneManager_Test, OnActiveSceneChanged_Event) {
@@ -138,13 +139,14 @@ TEST(SceneManager_Test, OnActiveSceneChanged_Event) {
Scene* scene2 = sm.CreateScene("Scene2");
bool eventFired = false;
sm.OnActiveSceneChanged().Subscribe([&eventFired](Scene*) {
uint64_t subId = sm.OnActiveSceneChanged().Subscribe([&eventFired](Scene*) {
eventFired = true;
});
sm.SetActiveScene(scene2);
EXPECT_TRUE(eventFired);
sm.OnActiveSceneChanged().Unsubscribe(subId);
}
TEST(SceneManager_Test, CreateScene_MultipleScenes) {