对传递给模拟函数的参数调用成员函数的最简单方法是什么?
What is the easiest way to invoke a member function on an argument passed to a mocked function?
给定接口
class IFooable {
virtual void Fooable() = 0;
};
class IFoo {
virtual void Foo(IFooable* pFooable) = 0;
};
和google mock
class TMockFoo : public IFoo {
MOCK_METHOD1(Foo, void (IFooable*));
};
指定在模拟方法Foo()
的参数上调用Fooable()
的操作的最简单方法是什么?
我试过了
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));
我找不到一个简单的方法,最后决定使用
TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
.WillByDefault(Invoke(boost::mem_fn(&IFooable::Fooable)));
调用成员函数最简单的方法是使用lambda:
TMockFoo MockFoo;
ON_CALL(MockFoo, Foo(_))
.WithArg<0>(Invoke([](IFooable * pFooable) { pFooable->Fooable(); }));
相关文章:
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?
- 请求最简单的 OpenMP 目标 GPU 示例
- 将时间戳打印到流的最简单方法
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- C++20 个模块在 clang (Windows):在最简单的示例中键入信息错误
- 对多个(可能)重叠范围进行分区的最简单算法
- 在 cpp 中最简单的图形实现
- boost::variant - 对变体应用算术的最简单方法
- 多线程 gtkmm 应用程序最简单的示例
- 创建返回对象引用的成员函数的最简单方法
- C++:从函数访问主变量的最简单方法
- 从Erlang通过ports调用C函数的最快和最简单的方法是什么?
- 打印成员函数地址的最简单方法是什么?
- 对传递给模拟函数的参数调用成员函数的最简单方法是什么?
- 在构造函数中初始化多个相关const属性的最简单方法
- 如何以最简单的方式禁用lua中的风险函数
- 创建用于在函数内写入的文件的最简单方法
- 重载构造函数的最简单方法