我想模拟一个模板化的方法。如何使用Google Mock模拟模板化方法?
下面是一个包含此方法的类嘲笑:
class myClass
{
public:
virtual ~myClass() {}
template<typename T>
void myMethod(T param);
}
我如何可以模拟使用谷歌模拟方法的MyMethod?
我想模拟一个模板化的方法。如何使用Google Mock模拟模板化方法?
下面是一个包含此方法的类嘲笑:
class myClass
{
public:
virtual ~myClass() {}
template<typename T>
void myMethod(T param);
}
我如何可以模拟使用谷歌模拟方法的MyMethod?
在之前版本的Google Mock中,您只能模拟虚拟功能,请参阅项目页面中的documentation。
允许使用他们所谓的hi-perf依赖注入模拟non-virtual methods的更新版本。
由于congusbongus
状态:
谷歌模拟依赖于增加成员变量支持方法嘲弄,因为你不能创建模板成员变量,这是不可能模仿的模板功能
一由Michael Harrington在评论的googlegroups链接中提供的解决方法是制作专门的模板方法,这些方法将调用可以被模拟的普通函数。它不能解决一般情况,但它可以用于测试。
struct Foo
{
MOCK_METHOD1(GetValueString, void(std::string& value));
template <typename ValueType>
void GetValue(ValueType& value);
template <>
void GetValue(std::string& value) {
GetValueString(value);
}
};
是的,你是对的伊斯梅尔,欲了解更多信息,我发现此链接: http://groups.google.com/group/googlemock/browse_thread/thread/e52b27b7d9b20145 因此,有一种解决方法来模拟模板化方法。 – 2010-08-06 21:03:54
为了详细说明这一点,Google Mock依赖于添加成员变量来支持方法模拟,并且由于您无法创建模板成员变量,所以模拟模板函数是不可能的。 – congusbongus 2013-10-14 23:20:03
遗憾的是没有帮助的,但我是当他看到类似这样的问题谁,唯一的一个,具有第一直觉来回答“你真是个愚蠢的模板!和你母亲为你精心打扮滑稽!谁可以使用这样一个愚蠢的愚蠢模板?“ – 2010-08-06 17:29:41
感谢您的评论Brian ... 您看到的源代码是更大类的一部分。 这个模板并不像它看起来那么愚蠢...... – 2010-08-06 17:34:39
http://www.merriam-webster.com/dictionary/mock:以轻蔑或嘲笑来对待 – 2010-08-06 17:52:40