在传递给模拟函数的参数上调用成员函数的最简单方法是什么?

Tob*_*ias 5 c++ googlemock

给定接口

class IFooable {
  virtual void Fooable() = 0;
};

class IFoo {
  virtual void Foo(IFooable* pFooable) = 0;
};
Run Code Online (Sandbox Code Playgroud)

和古尔模拟模拟

class TMockFoo : public IFoo {
  MOCK_METHOD1(Foo, void (IFooable*));
};
Run Code Online (Sandbox Code Playgroud)

指定调用Fooable()模拟方法参数的操作的最简单方法是什么Foo()

我努力了

TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
  .WithArg<0>(Invoke(&IFooable::Fooable));
Run Code Online (Sandbox Code Playgroud)

但这不会编译,因为Invoke()只有一个参数需要一个自由函数,而不是成员函数。

使用boost::bind应该可以工作,但不一定会使代码太可读。在编写自定义之前Action,我想检查一下是否遗漏了一些完全明显的东西。

Tob*_*ias 1

我找不到简单的方法,最后解决了

TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
  .WillByDefault(Invoke(boost::mem_fn(&IFooable::Fooable)));
Run Code Online (Sandbox Code Playgroud)