鉴于接口(interface)

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

class IFoo {
  virtual void Foo(IFooable* pFooable) = 0;
};

和 goole mock 模拟
class TMockFoo : public IFoo {
  MOCK_METHOD1(Foo, void (IFooable*));
};

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

我试过了
TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
  .WithArg<0>(Invoke(&IFooable::Fooable));

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

使用 boost::bind 可能应该可行,但不一定会使代码太可读。在我编写自定义 Action 之前,我想检查一下我是否没有遗漏一些非常明显的东西。

最佳答案

我无法测试它,因为我没有安装 Google Mock,但似乎 Invoke 有另一个带有两个参数的重载,对象和方法指针,所以它是:

IFooable* ifooable = new IFooableImpl(...);
TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
  .WithArg<0>(Invoke(&ifooable,&IFooable::Fooable));

关于c++ - 在传递给模拟函数的参数上调用成员函数的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7160600/

10-12 20:43