给出接口
class IFooable {
virtual void Fooable() = 0;
};
class IFoo {
virtual void Foo(IFooable* pFooable) = 0;
};
和goole mock 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
之前,我想检查一下我是否错过了一些非常明显的东西。
答案 0 :(得分:1)
我找不到一个简单的方法,最后以
结算TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
.WillByDefault(Invoke(boost::mem_fn(&IFooable::Fooable)));
答案 1 :(得分:0)
我无法测试它,因为我没有安装Google Mock,但似乎Invoke
有另外两个参数的重载,对象和方法指针,所以它会是:
IFooable* ifooable = new IFooableImpl(...);
TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
.WithArg<0>(Invoke(&ifooable,&IFooable::Fooable));
答案 2 :(得分:0)
调用成员函数的最简单方法是使用lambda:
TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
.WithArg<0>(Invoke([](IFooable * pFooable) { pFooable->Fooable(); }));