Googlemock 没有捕捉到泄露的对象

Googlemock not catching leaked object

我创建了一个 googlemock 文本装置 class,并且在设置中我使用 new 创建了两个对象。在拆解中,如果我删除 none 我只会得到其中一个对象的内存泄漏错误。

class MissileLauncherListenerTest : public ::testing::Test {
protected:
    MissileLauncher* launcher;
    MockProjectileCreatorListener* launcher_listener;

    virtual void SetUp() {
        launcher = new MissileLauncher(FRIENDLY) ;
        launcher_listener = new MockProjectileCreatorListener();
        launcher->add_listener(launcher_listener);
    }

    virtual void TearDown() {
        delete launcher_listener;
    }
};

TEST_F(MissileLauncherListenerTest, multiple_listeners_notified) {
    MockProjectileCreatorListener launcher_listener2;

    EXPECT_CALL(*launcher_listener, notify_projectile_launched(_, _));
    EXPECT_CALL(launcher_listener2, notify_projectile_launched(_, _));

    launcher->add_listener(&launcher_listener2);
    launcher->create_missile(0, 0, 0, 0);
} 

在这段代码中,我没有从 googletest 收到内存泄漏错误,难道我不应该收到 MissileLauncher 的错误吗?

您没有收到 MissileLauncher 对象的内存泄漏错误,因为它不是模拟对象。它是您 class 的对象,因此 gmock 不会跟踪任何泄漏。另一方面,classMockProjectileCreatorListener是由gmock生成的。因此,此 class 的所有对象都是模拟对象,并且 gmock 机制将警告您此类对象的泄漏。