如何正确地使模拟方法调用原始虚方法

时间:2017-10-13 15:39:18

标签: c++ googlemock

我想为一个模拟方法定义一个行为,当它在测试中被调用时,正在检查特定于该测试的所有EXPECTED_CALLON_CALL,但仍然是原始方法之后执行。

1 个答案:

答案 0 :(得分:1)

您可以按照Google Mock documentation使用委托到真实的技术来实现这一目标:

  

您可以使用委托到真实技术来确保您的模拟与真实对象具有相同的行为,同时保留验证调用的能力。这是一个例子:

using ::testing::_;
using ::testing::AtLeast;
using ::testing::Invoke;

class MockFoo : public Foo {
 public:
  MockFoo() {
    // By default, all calls are delegated to the real object.
    ON_CALL(*this, DoThis())
        .WillByDefault(Invoke(&real_, &Foo::DoThis));
    ON_CALL(*this, DoThat(_))
        .WillByDefault(Invoke(&real_, &Foo::DoThat));
    ...
  }
  MOCK_METHOD0(DoThis, ...);
  MOCK_METHOD1(DoThat, ...);
  ...
 private:
  Foo real_;
};
...

  MockFoo mock;

  EXPECT_CALL(mock, DoThis())
      .Times(3);
  EXPECT_CALL(mock, DoThat("Hi"))
      .Times(AtLeast(1));
  ... use mock in test ...