Gmock泄漏内存

GMock leaking memory

本文关键字:内存 泄漏 Gmock      更新时间:2023-10-16

代码

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();
}

运行此代码时,它会泄漏

错误:应删除此模拟对象(在test btest.test中使用(,但永远不要。它的地址是 @0x1234。

由于应该在破坏期间运行期望,所以我不确定为什么会引起问题。

我尝试了此处所述的共享_ptr别名方法 - 使用unique_ptr的依赖项注入以模拟,但即使我仍然得到例外。

class A需要具有虚拟驱动器,否则class MockA的破坏者未执行。