Googlemock没有抓到泄露的对象

时间:2016-01-15 08:23:25

标签: c++ memory-leaks googletest googlemock

我创建了一个googlemock文本夹具类,在SetUp中我用new创建了两个对象。在拆解中,如果我删除没有,我只会得到其中一个对象的内存泄漏错误。

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的错误吗?

1 个答案:

答案 0 :(得分:3)

您没有收到MissileLauncher对象的内存泄漏错误,因为它不是模拟对象。它是您班级的一个对象,因此gmock不会跟踪任何泄漏。另一方面,课程MockProjectileCreatorListenergmock生成。因此,此类的所有对象都是模拟对象,gmock机制会警告您此类对象的泄漏。