gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:09:00 24 4
gpt4 key购买 nike

给定接口(interface)

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*));
};

指定在模拟方法 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));

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com