我想創建一個模擬這個功能:C++ gmock調用其它函數相同ARGS
bool func1(vector<string> data)
的真正功能應該充滿載體,如果成功返回true。
我的模擬也應該用值填充矢量,並且總是返回true。我怎樣才能用gmock做到這一點?
我想創建一個模擬這個功能:C++ gmock調用其它函數相同ARGS
bool func1(vector<string> data)
的真正功能應該充滿載體,如果成功返回true。
我的模擬也應該用值填充矢量,並且總是返回true。我怎樣才能用gmock做到這一點?
您還沒有指定是成員函數還是全局成員函數。既然你想在C++嘲笑框架中嘲笑它,我會認爲它是。另外,正如Antonio所說,如果要修改矢量,必須更改函數的簽名並使用引用來傳遞data
。因此,如果func1
是MyClass
類中的成員,則需要執行以下操作。
創建界面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
是一個全球性的功能,你可以通過定義一個小接口,並調用它通過在您的生產代碼,接口使用同樣的方法。
謝謝,作品! – Liad
1.你到目前爲止嘗試過什麼? 2.使用該簽名,如果有的話,你的函數會填充**數據副本**,而不是數據本身。 –