修复 Components 和 Scene 模块测试问题
1. GameObject 析构函数:从全局注册表移除自己,防止悬挂指针 2. SceneManager 测试:事件订阅后正确 Unsubscribe,防止 lambda 销毁后悬挂调用 3. SceneManager 测试:使用唯一场景名称避免覆盖问题
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user