我想为这个函数创建一个模拟:
bool func1(vector<string> data)
真正的函数应该填充 vector ,如果成功则返回true。
我的模拟也应该用值填充 vector 并始终返回 true。我怎样才能用 gmock 做到这一点?
最佳答案
您没有指定这是成员函数还是全局函数。因为您想在 C++ 模拟框架中模拟它,所以我假设它是。此外,正如 Antonio 所说,如果你想修改 vector ,你必须更改函数的签名并使用引用传递 data
。因此,如果 func1
是类 MyClass
中的成员,您需要执行以下操作。
创建一个接口(interface) IMyClass
并让您的类实现该接口(interface):
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 实现了这个接口(interface):
class MyClassMock : public IMyClass
{
public:
MOCK_METHOD1(func1, bool(vector<string> &));
}
最后,在您的测试中,您可以模拟调用此函数。假设您想模拟调用将两个字符串("str1"
、"str2"
)设置为 vector data
。这就是你在测试体中要做的:
vector<string> dummyData = { string("str1"), string("str2") };
MyClassMock mockObj;
EXPECT_CALL(mockObj, func1(_))
.WillOnce(DoAll(SetArgReferee<0>(dummyData), Return(true)));
如果 func1
是一个全局函数,您可以通过定义一个小接口(interface)并在生产代码中通过该接口(interface)调用它来使用相同的方法。
关于c++ gmock使用相同的args调用其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33474534/