c++gmock使用相同的args调用其他函数
c++ gmock invoke other function with same args
我想为这个函数创建一个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
是一个全局函数,您可以使用相同的方法,定义一个小接口并通过生产代码中的接口调用它。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 如果使用va_list将args从一个variadic函数传递给另一个函数,那么如何调用va_start(没有错误)
- 在C++中,我们如何用有效的X(Args..)语法调用执行函数的所有内容
- c++gmock使用相同的args调用其他函数
- 在标准下调用 std::function<void(Args...)> 是否违法?
- 在c++中的fn调用中,args被复制到相应的参数中.这是初始化还是赋值