2015-11-02 44 views
0

我想創建一個模擬這個功能:C++ gmock調用其它函數相同ARGS

bool func1(vector<string> data) 

的真正功能應該充滿載體,如果成功返回true。
我的模擬也應該用值填充矢量,並且總是返回true。我怎樣才能用gmock做到這一點?

+1

1.你到目前爲止嘗試過什麼? 2.使用該簽名,如果有的話,你的函數會填充**數據副本**,而不是數據本身。 –

回答

1

您還沒有指定是成員函數還是全局成員函數。既然你想在C++嘲笑框架中嘲笑它,我會認爲它是。另外,正如Antonio所說,如果要修改矢量,必須更改函數的簽名並使用引用來傳遞data。因此,如果func1MyClass類中的成員,則需要執行以下操作。

創建界面IMyClass,讓你的類實現該接口:

class IMyClass 
{ 
public: 
    virtual IMyClass() {} 
    virtual bool func1(vector<string> &data) = 0; 
} 

class MyClass : public IMyClass 
{ 
    bool func1(vector<string> &data) override 
    { 
     // Your code that modifies 'data' 
    } 
} 

然後,做一個模擬類也實現使用gmock這個接口:

class MyClassMock : public IMyClass 
{ 
public: 
    MOCK_METHOD1(func1, bool(vector<string> &)); 
} 

最後,在您的測試,你可以模擬調用這個函數。假設你想模擬通話,將設置兩個字符串("str1","str2")到矢量data。這是你會怎麼做測試的身體是什麼:

vector<string> dummyData = { string("str1"), string("str2") }; 
MyClassMock mockObj; 
EXPECT_CALL(mockObj, func1(_)) 
    .WillOnce(DoAll(SetArgReferee<0>(dummyData), Return(true))); 

如果func1是一個全球性的功能,你可以通過定義一個小接口,並調用它通過在您的生產代碼,接口使用同樣​​的方法。

+0

謝謝,作品! – Liad

相關問題