GMock 泄漏内存
GMock leaking memory
代码
class A {
public:
void doit() {...}
}
class B {
public:
explicit B(unique_ptr<A> a): a_(move(a)) {}
void run() {
a_->doit();
}
private:
unique_ptr<A> a_;
}
测试代码
class MockA : public A {
public:
MOCK_METHOD0(doit, void(void));
}
TEST(BTest, Test) {
auto mockA = std::make_unique<A>();
EXPECT_CALL(*mockA, doit(_)).Times(1);
B b(std::move(mockA));
b.run();
}
当运行使用此代码时,它会泄漏
错误:这个模拟对象(在测试BTest.Test中使用)应该被删除但从来没有被删除。它的地址是@0x1234.
由于预期应该 运行 在销毁过程中,我不确定为什么会导致问题。
我尝试了 shared_ptr 此处描述的别名方法 - 但即使如此我仍然得到了那个异常。
class A
需要有虚析构函数,否则class MockA
的析构函数不会执行。
代码
class A {
public:
void doit() {...}
}
class B {
public:
explicit B(unique_ptr<A> a): a_(move(a)) {}
void run() {
a_->doit();
}
private:
unique_ptr<A> a_;
}
测试代码
class MockA : public A {
public:
MOCK_METHOD0(doit, void(void));
}
TEST(BTest, Test) {
auto mockA = std::make_unique<A>();
EXPECT_CALL(*mockA, doit(_)).Times(1);
B b(std::move(mockA));
b.run();
}
当运行使用此代码时,它会泄漏
错误:这个模拟对象(在测试BTest.Test中使用)应该被删除但从来没有被删除。它的地址是@0x1234.
由于预期应该 运行 在销毁过程中,我不确定为什么会导致问题。
我尝试了 shared_ptr 此处描述的别名方法 -
class A
需要有虚析构函数,否则class MockA
的析构函数不会执行。