【问题标题】:GMock leaking memory [duplicate]GMock泄漏内存[重复]
【发布时间】:2017-10-01 02:27:07
【问题描述】:

代码

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 但即使我仍然得到那个异常。

【问题讨论】:

    标签: c++ testing googletest


    【解决方案1】:

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

    【讨论】:

    • @jack_carver 同样的事情:doIt() 不是虚拟的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2013-06-15
    • 2016-08-17
    相关资源
    最近更新 更多