この特別なシナリオでは、リークを取り除くことができません。
テストを実行すると、リークされたモックオブジェクトのメッセージが表示されます。具体的なメッセージ:
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()));
}
}
GoogleMockがshared_ptrをリークしているのはなぜですか?
関連するStack-Overflowで。しかし、そこからの提案は私の問題を解決しません:X
少なくともエラーを抑制するために私が見つけた唯一の可能性は次のとおりです。
Mock::AllowLeak(deviceElement_.get());
ただし、これは非常にクリーンなソリューションではありません=)
では、リークを適切に取り除く方法は?