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

c++ gmock invoke other function with same args

我想为这个函数创建一个模拟:

    bool func1(vector<string> data)

真正的函数应该填充向量,return如果成功则为真。
我的模拟也应该用值填充向量并且 return 始终为真。我怎样才能用 gmock 做到这一点?

您没有指定这是成员函数还是全局函数。因为您想在 C++ 模拟框架中模拟它,所以我假设它是。另外,正如 Antonio 所说,如果要修改向量,则必须更改函数的签名并使用引用传递 data 。因此,如果 func1 是 class MyClass 中的成员,您需要执行以下操作。

创建接口 IMyClass 并让您的 class 实现该接口:

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