對於這種特殊場景,我無法擺脫泄漏。將GoogleMock與Boost :: Shared Pointer一起使用時漏出的模擬對象
我在執行測試時收到泄漏模擬對象的消息。具體的消息:
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());
然而,這並不是一個很乾淨的解決方案=)
那麼如何正確擺脫泄漏?
我使用谷歌模擬v1.6.0以及谷歌測試v1.6.0 – Alex
你試過重置()在'TearDown()'shared_ptrs? –
你的shared_ptr關係中有一個循環嗎?共享指針存在一個已知問題,週期會導致泄漏。 –