对于这个特殊的场景,我无法消除泄漏。
执行测试时,我收到了关于Mock对象泄漏的消息。具体消息如下:
ClassElementFixture.h:102: 错误:应该删除此模仿对象(在测试ClassElementFixture.initialize中使用),但从未删除。它的地址为@0x940a650。
我标记了错误所指向的行。以下是我代码的简化版本:
我已经找到了一个与之相关的问题,地址为Why is GoogleMock leaking my shared_ptr?,但那里的建议并没有解决我的问题 :X。
我唯一找到的可能解决错误的方法是:
然而,这并不是一个很干净的解决方案=)
那么如何正确地消除泄漏呢?
执行测试时,我收到了关于Mock对象泄漏的消息。具体消息如下:
ClassElementFixture.h:102: 错误:应该删除此模仿对象(在测试ClassElementFixture.initialize中使用),但从未删除。它的地址为@0x940a650。
我标记了错误所指向的行。以下是我代码的简化版本:
...
class ClassElementFixture: public ::testing::Test
{
public:
boost::shared_ptr<fesa::ClassElement> classElement_;
boost::shared_ptr<fesa::DeviceElementMock> deviceElement_;
...
void SetUp()
{
classElement_.reset(new fesa::ClassElement());
}
void TearDown()
{
}
void initializeFake()
{
fesa::ParserElementFactoryMock factory;
deviceElement_.reset(new fesa::DeviceElementMock());
EXPECT_CALL(factory, createDeviceElement(_))
.WillOnce(Return(deviceElement1_));
EXPECT_CALL(*deviceElement_, initialize(_));//Error refers to here
classElement_->initialize(factory);
EXPECT_TRUE(Mock::VerifyAndClearExpectations(deviceElement_.get()));
}
}
我已经找到了一个与之相关的问题,地址为Why is GoogleMock leaking my shared_ptr?,但那里的建议并没有解决我的问题 :X。
我唯一找到的可能解决错误的方法是:
Mock::AllowLeak(deviceElement_.get());
然而,这并不是一个很干净的解决方案=)
那么如何正确地消除泄漏呢?
TearDown()
中重置shared_ptrs
吗? - Arne Mertz