我有一个工厂,返回一个智能指针。 无论使用什么智能指针,我都无法让Google Mock嘲笑工厂方法。 模拟对象是所有方法都是虚拟的纯抽象接口的实现。 我有一个原型: 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>'" 智能指针指向的types被定义。 而我得到它试图访问其中一个构造函数声明为private,但我不明白为什么。 当这是一个std :: auto_ptr,错误说没有复制构造函数,这使我困惑。 无论如何,有没有办法模拟一个方法,返回一个智能指针? 还是有更好的方法来build造一个工厂? 是我唯一的决心返回一个原始指针(blech …)? 我的环境是Visual Studio 2010 Ultimate和Windows 7.我没有使用CLI。
我是我公司开拓性的unit testing工作,需要select一个嘲笑的框架来使用。 我以前从来没有使用过一个模拟框架。 我们已经select了Google Test,所以使用Google Mock会很好。 不过,在看过Google Mock的教程之后,我最初的印象是: 用MOCK_METHODnmacros来重新声明模拟类中每个方法的必要性似乎是不必要的,而且似乎违背了DRY原则。 它们的匹配器(例如,EXPECT_CALL(turtle,Forward(_));;中的'_')和匹配的顺序似乎太强大了。 比如,说一些你并不擅长的事情就很容易,而且错过了这样的错误。 我对Google的开发人员有很高的信心,对我自己判断嘲笑框架的能力缺乏信心,从来没有使用过。 所以我的问题是: 这些有效的担忧? 还是有没有更好的方法来定义一个模拟对象,并在实践中直观的匹配? 我希望以前使用过Google Mock的人的答案,并且与其他C ++框架进行比较会有帮助。