我有一个工厂,返回一个智能指针。无论使用什么智能指针,我都无法让Google Mock嘲笑工厂方法。Google可以用智能指针返回类型来模拟一个方法吗?
模拟对象是所有方法都是虚拟的纯抽象接口的实现。我有一个原型:
MOCK_METHOD0(Create, std::unique_ptr<IMyObjectThing>());
我也得到:
"...gmock/gmock-spec-builders.h(1314): error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'"
类型指出,在智能指针定义。
我得到它试图访问一个声明为private的构造函数,但我不明白为什么。当这是一个std :: auto_ptr时,错误表示没有复制构造函数,这让我感到困惑。
无论如何,有没有办法模拟一个返回智能指针的方法?或者有更好的方法来建造工厂?我唯一的决心就是返回一个原始指针(blech ...)?
我的环境是Visual Studio 2010 Ultimate和Windows 7.我没有使用CLI。
你不需要对你的类的接口做任何改变,只是为了让它们与你的模拟框架一起工作。通常这是不可能的。这对我来说不是一个可接受的解决方案! –
工厂类返回一个原始指针对我来说似乎是不可接受的。在这种情况下,unique_ptr最有意义。它的设计部分是为了解决“将结果分配给*每个*呼叫站点上的某个共享指针”的问题。 –
我不认为这是正确的答案,将所有内容都改为原始或共享所有权并不是一种解决方案,只是为了测试事情! – paulm