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
机制将警告您此类对象的泄漏。
我创建了一个 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
机制将警告您此类对象的泄漏。