c++gmock使用相同的args调用其他函数

c++ gmock invoke other function with same args

本文关键字:args 调用 其他 函数 c++gmock      更新时间:2023-10-16

我想为这个函数创建一个mock:

    bool func1(vector<string> data)

实函数应该填充向量,如果成功则返回true
我的mock还应该用值填充向量,并始终返回true。我该如何使用gmock?

您尚未指定这是成员函数还是全局函数。既然你想在C++mocking框架中对其进行mock,我认为是的。此外,正如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'
    }
}

然后,制作一个mock类,它也使用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是一个全局函数,您可以使用相同的方法,定义一个小接口并通过生产代码中的接口调用它。