2016-02-12 134 views
1

是否有可能做一个模拟类的可复制谷歌测试框架? 我已经看到,默认复制构造函数复制赋值运算符被删除,一旦使用了MOCK_METHOD宏。 有没有办法解决这个问题?复印的嘲笑

回答

1

我无法想象复制模仿对象的任何使用情况。当你想用模拟对象模仿真实对象时 - 你可以从测试代码和测试用例代码访问同一个对象 - 那么为什么需要复制呢?

无论如何 - 我看到一种方法来复制模拟对象: 您必须在模拟对象上定义包装 - 它应由std::shared_ptr保存。

一个例子:

class XxxMock : public XxxInterface 
{ 
public: 
    MOCK_METHOD0(foo, void()); 
}; 

#include <memory> 
class XxxSharedMock : public XxxInteface 
{ 
public: 
    XxxSharedMock(std::shared_ptr<XxxMock> xxxMock = std::make_shared<XxxMock>()) 
     : xxxMock(xxxMock) 
    {} 
    void foo() override 
    { 
     xxxMock->foo(); 
    } 
    // having: XxxSharedMock xxxMock; 
    // do:  EXPECT_CALL(xxxMock.mock(), foo()); 
    XxxMock& mock() { return *xxxMock; } 
    XxxMock const& mock() const { return *xxxMock; } 

privated: 
    std::shared_ptr<XxxMock> xxxMock; 
};