2016-02-12 34 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; 
};