修复 Components 和 Scene 模块测试问题
1. GameObject 析构函数:从全局注册表移除自己,防止悬挂指针 2. SceneManager 测试:事件订阅后正确 Unsubscribe,防止 lambda 销毁后悬挂调用 3. SceneManager 测试:使用唯一场景名称避免覆盖问题
This commit is contained in:
@@ -22,6 +22,7 @@ GameObject::GameObject(const std::string& name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
GameObject::~GameObject() {
|
GameObject::~GameObject() {
|
||||||
|
GetGlobalRegistry().erase(m_id);
|
||||||
if (m_transform) {
|
if (m_transform) {
|
||||||
delete m_transform;
|
delete m_transform;
|
||||||
m_transform = nullptr;
|
m_transform = nullptr;
|
||||||
|
|||||||
@@ -60,14 +60,14 @@ TEST(SceneManager_Test, GetScene_NotExists) {
|
|||||||
|
|
||||||
TEST_F(SceneManagerTest, GetAllScenes_ReturnsAll) {
|
TEST_F(SceneManagerTest, GetAllScenes_ReturnsAll) {
|
||||||
SceneManager& sm = SceneManager::Get();
|
SceneManager& sm = SceneManager::Get();
|
||||||
size_t initialCount = sm.GetAllScenes().size();
|
size_t beforeCount = sm.GetAllScenes().size();
|
||||||
sm.CreateScene("Scene1");
|
sm.CreateScene("GetAllScenes_TestScene1");
|
||||||
sm.CreateScene("Scene2");
|
sm.CreateScene("GetAllScenes_TestScene2");
|
||||||
sm.CreateScene("Scene3");
|
sm.CreateScene("GetAllScenes_TestScene3");
|
||||||
|
|
||||||
auto scenes = sm.GetAllScenes();
|
auto scenes = sm.GetAllScenes();
|
||||||
|
|
||||||
EXPECT_EQ(scenes.size(), initialCount + 3);
|
EXPECT_EQ(scenes.size(), beforeCount + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(SceneManager_Test, SetActiveScene) {
|
TEST(SceneManager_Test, SetActiveScene) {
|
||||||
@@ -123,13 +123,14 @@ TEST(SceneManager_Test, UnloadScene_ByName) {
|
|||||||
TEST(SceneManager_Test, OnSceneLoaded_Event) {
|
TEST(SceneManager_Test, OnSceneLoaded_Event) {
|
||||||
SceneManager& sm = SceneManager::Get();
|
SceneManager& sm = SceneManager::Get();
|
||||||
bool eventFired = false;
|
bool eventFired = false;
|
||||||
sm.OnSceneLoaded().Subscribe([&eventFired](Scene*) {
|
uint64_t subId = sm.OnSceneLoaded().Subscribe([&eventFired](Scene*) {
|
||||||
eventFired = true;
|
eventFired = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
sm.CreateScene("TestScene");
|
sm.CreateScene("TestScene");
|
||||||
|
|
||||||
EXPECT_TRUE(eventFired);
|
EXPECT_TRUE(eventFired);
|
||||||
|
sm.OnSceneLoaded().Unsubscribe(subId);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(SceneManager_Test, OnActiveSceneChanged_Event) {
|
TEST(SceneManager_Test, OnActiveSceneChanged_Event) {
|
||||||
@@ -138,13 +139,14 @@ TEST(SceneManager_Test, OnActiveSceneChanged_Event) {
|
|||||||
Scene* scene2 = sm.CreateScene("Scene2");
|
Scene* scene2 = sm.CreateScene("Scene2");
|
||||||
|
|
||||||
bool eventFired = false;
|
bool eventFired = false;
|
||||||
sm.OnActiveSceneChanged().Subscribe([&eventFired](Scene*) {
|
uint64_t subId = sm.OnActiveSceneChanged().Subscribe([&eventFired](Scene*) {
|
||||||
eventFired = true;
|
eventFired = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
sm.SetActiveScene(scene2);
|
sm.SetActiveScene(scene2);
|
||||||
|
|
||||||
EXPECT_TRUE(eventFired);
|
EXPECT_TRUE(eventFired);
|
||||||
|
sm.OnActiveSceneChanged().Unsubscribe(subId);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(SceneManager_Test, CreateScene_MultipleScenes) {
|
TEST(SceneManager_Test, CreateScene_MultipleScenes) {
|
||||||
|
|||||||
Reference in New Issue
Block a user