2010-08-06 74 views
13

我想模拟一个模板化的方法。如何使用Google Mock模拟模板化方法?

下面是一个包含此方法的类嘲笑:

class myClass 
{ 
public: 
    virtual ~myClass() {} 

    template<typename T> 
    void myMethod(T param); 
} 

我如何可以模拟使用谷歌模拟方法的MyMethod?

+6

遗憾的是没有帮助的,但我是当他看到类似这样的问题谁,唯一的一个,具有第一直觉来回答“你真是个愚蠢的模板!和你母亲为你精心打扮滑稽!谁可以使用这样一个愚蠢的愚蠢模板?“ – 2010-08-06 17:29:41

+1

感谢您的评论Brian ... 您看到的源代码是更大类的一部分。 这个模板并不像它看起来那么愚蠢...... – 2010-08-06 17:34:39

+4

http://www.merriam-webster.com/dictionary/mock:以轻蔑或嘲笑来对待 – 2010-08-06 17:52:40

回答

7

在之前版本的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); 
    } 
}; 
+1

是的,你是对的伊斯梅尔,欲了解更多信息,我发现此链接: http://groups.google.com/group/googlemock/browse_thread/thread/e52b27b7d9b20145 因此,有一种解决方法来模拟模板化方法。 – 2010-08-06 21:03:54

+1

为了详细说明这一点,Google Mock依赖于添加成员变量来支持方法模拟,并且由于您无法创建模板成员变量,所以模拟模板函数是不可能的。 – congusbongus 2013-10-14 23:20:03