嵌套预期调用时,gtest EXPECT_CALL 不起作用

gtest EXPECT_CALL does not working when expected call is nested

看看这样的代码片段:

class Foo {
 public:
  Foo() {
  }

  void invoke_init(const int i) {
    init(i);
  }

 private:
  void init(const int i) {
    std::cout << "init " << i << std::endl;
  }
};
    
class MockedFoo : public Foo {
 public:
  MOCK_METHOD(void, init, (const int));
};

TEST(Foo, TestInitCalled) {
  MockedFoo mock;
  mock.invoke_init(1);
  EXPECT_CALL(mock, init(1));
}

正如预期的那样,调用了 init() 并且我看到了相应的输出。但是测试失败了。为什么?那里有什么问题?

Foo::init 需要 protected 而不是 private。它还需要是 虚拟.

如果没有protected作为它的可见性属性,它就不能在继承的class中真正被覆盖。没有 virtual,gmock 也无能为力。

而不是这个:

 private:
  void init(const int i) {
    std::cout << "init " << i << std::endl;
  }

这个:

 protected:
  virtual void init(const int i) {
    std::cout << "init " << i << std::endl;
  }