GMock泄漏记忆

时间:2017-05-03 10:03:23

标签: c++ testing googletest

代码

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别名方法 - Dependency injection with unique_ptr to mock但是我仍然得到了那个例外。

1 个答案:

答案 0 :(得分:2)

class A需要有虚拟析构函数,否则class MockA的析构函数不会被执行。