如何使用Google Mock模拟模板化方法?

Xav*_* V. 18 c++ templates mocking googlemock

我试图模仿一个模板化的方法.

这是包含模拟方法的类:

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

    template<typename T>
    void myMethod(T param);
}
Run Code Online (Sandbox Code Playgroud)

如何使用Google Mock模拟myMethod方法?

Ism*_*ael 9

在以前版本的Google Mock中,您只能模拟虚拟功能,请参阅项目页面中的文档.

更新的版本允许使用他们称为hi-perf依赖注入的方式来模拟非虚方法.

作为congusbongus州:

Google Mock依赖于添加成员变量以支持方法模拟,并且由于无法创建模板成员变量,因此无法模拟模板函数

迈克尔·哈林顿(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);
    } 
};
Run Code Online (Sandbox Code Playgroud)