इस विशेष परिदृश्य के लिए, मैं लीक से छुटकारा पाने में सक्षम नहीं हूं।बूस्ट के साथ GoogleMock का उपयोग करते समय लीक मॉक ऑब्जेक्ट्स :: साझा पॉइंटर्स
मुझे परीक्षण निष्पादित करते समय लीक मॉक ऑब्जेक्ट का संदेश मिलता है। कंक्रीट संदेश:
क्लासइलेमेंटफिक्चर.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?
। लेकिन वहाँ से सुझाव मेरी समस्या हल नहीं होती: एक्स
केवल संभावना जो मैं कम से कम त्रुटि को दबाने के लिए आदेश में पाया, यह है:
Mock::AllowLeak(deviceElement_.get());
हालांकि यह एक बहुत ही स्वच्छ समाधान नहीं है =)
तो लीक से ठीक से कैसे छुटकारा पाएं?
मैं google-mock v1.6.0 का उपयोग करता हूं और साथ ही google-test v1.6.0 – Alex
क्या आपने 'TearDown()' में shared_ptrs को रीसेट करने का प्रयास किया है? –
क्या आपके पास अपने साझा_पीटीआर संबंधों में एक चक्र है? साझा पॉइंटर्स के साथ एक ज्ञात समस्या है जहां चक्र लीक का कारण बन सकते हैं। –