Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用gmock框架设置通过引用发送的参数?_C++_Unit Testing_Testing_Googlemock - Fatal编程技术网

C++ 如何使用gmock框架设置通过引用发送的参数?

C++ 如何使用gmock框架设置通过引用发送的参数?,c++,unit-testing,testing,googlemock,C++,Unit Testing,Testing,Googlemock,我将尝试重现一个例子 class Object{ public: Object(){} virtual void doSomething(vector<int>& x) {x.push_back(14);} virtual int foo(){return 0;} }; class ObjectMock : public Object { public: MyMock(){} ~MyMock(){}

我将尝试重现一个例子

class Object{
     public:
     Object(){}
     virtual void doSomething(vector<int>& x) {x.push_back(14);}
     virtual int foo(){return 0;} 
};

class ObjectMock : public Object
{
    public:
    MyMock(){}
    ~MyMock(){}
    MOCK_METHOD1(doSomething, void(std::vector<int>&));
    MOCK_METHOD0(foo, int());
};

class MyClass{
    public:
    Object* _obj;
    MyClass(){
        _obj = new Object;
    }
    void func()
    {
        int error = _obj->foo();
        if(error == 0)
        {
           int result;
           _obj->doSomething(result);
           if(result.size())
           {
               //the code where I'm trying to cover 
           }
        }
    }
};    
int main()
{
    //test 
    MyClass *item = new MyClass;
    ObjectMock* mock = new ObjectMock;
    item->obj = mock;
   //test for function foo 
   EXPECT_CALL(*mock, foo).WillOnce(Return(1));
   //this is my problem
   EXPECT_CALL(*mock, doSomething)//. What????
   item->func();
}
类对象{
公众:
对象(){}
虚空穴剂量测量(向量&x){x.push_-back(14);}
虚拟int foo(){return 0;}
};
类ObjectMock:公共对象
{
公众:
MyMock(){}
~MyMock(){}
模拟方法1(剂量测定法,无效(标准::向量&);
模拟方法0(foo,int());
};
类MyClass{
公众:
对象*_obj;
MyClass(){
_obj=新对象;
}
void func()
{
int error=_obj->foo();
如果(错误==0)
{
int结果;
_obj->剂量测定(结果);
if(result.size())
{
//我要讲的代码
}
}
}
};    
int main()
{
//试验
MyClass*项目=新的MyClass;
ObjectMock*mock=新建ObjectMock;
项目->对象=模拟;
//函数foo的测试
EXPECT_CALL(*mock,foo).WillOnce(返回(1));
//这是我的问题
期待呼叫(*模拟,doSomething)//什么????
item->func();
}
我如何更改上面的输出,记住它是通过引用接收的? 我希望向量中至少有一个元素

我试图查看gmock的文档。我找到的一切

EXPECT_调用(模拟_对象、方法(匹配器))

.使用(多参数匹配器)

.次(基数)

.插入顺序(顺序)*

.之后(期望值)*

.威洛斯(行动)*

.will(行动)


.s()

我在文档中找到了这个答案

vector<int> v{1,2,3};
EXPECT_CALL(*mock, doSomething).WillOnce(SetArgReferee<0>(v));
向量v{1,2,3};
期待你的呼叫(*模拟,doSomething)。WillOnce(设置argreference(v));

我在文档中找到了这个答案

vector<int> v{1,2,3};
EXPECT_CALL(*mock, doSomething).WillOnce(SetArgReferee<0>(v));
向量v{1,2,3};
期待你的呼叫(*模拟,doSomething)。WillOnce(设置argreference(v));

所以您想定义一个期望
EXPECT\u调用(*mock,doSomething)
当向量(作为doSomething的参数传递)不为空时将使用它?所以您想定义一个期望
EXPECT\u调用(*mock,doSomething)
当向量(作为doSomething的参数传递)不为空时将使用它?顺便说一句,代码中的大多数
new
语句是不必要的,而且它们是内存泄漏的来源。顺便说一句,代码中的大多数
new
语句是不必要的,而且它们是内存泄漏的来源。