C++ GoogleMock:如何根据另一个输入参数设置ArgReference?

C++ GoogleMock:如何根据另一个输入参数设置ArgReference?,c++,unit-testing,googletest,googlemock,C++,Unit Testing,Googletest,Googlemock,我想使用GoogleMock模拟服务,如下所示: class Request { int req_id; int request; }; class Response { int req_id; int response; }; int request(Response& res, const Request& req) { res.req_id = req.req_id; res.response = 2 * req.requ

我想使用GoogleMock模拟服务,如下所示:

class Request
{
    int req_id;
    int request;
};

class Response
{
    int req_id;
    int response;
};

int request(Response& res, const Request& req)
{
    res.req_id = req.req_id;
    res.response = 2 * req.request;

    return 1;
}

EXPECT_CALL(mock_service, request(_,_)).WillOnce(DoAll(SetArgReferee<0>(/* what here? */), Return(1)));
类请求
{
int REQU_id;
int请求;
};
班级反应
{
int REQU_id;
int响应;
};
int请求(响应和回复、常量请求和请求)
{
res.req_id=req.req_id;
res.response=2*req.request;
返回1;
}
EXPECT_CALL(模拟服务,请求(,)).WillOnce(DoAll(setargreference(/*what here?*/),Return(1));

如何根据传入的
const Request&req
,即
res.req\u id=req.req\u id,设置
响应&res
的参数
res.response=2*req.request

您的代码看起来不像是可以模仿的东西-但我想这只是问题的一个例子

因此,假设您在模拟类MockService中有模拟函数
request
,然后将
request
函数用作参数:

EXPECT_CALL(mock_service, request(_,_)).WillOnce(Invoke(&request));
如果您只想调用基类函数,请执行以下操作:

class mock_service_class : public service_class
{
public:
    MOCK_METHOD2(request, int(Response& res, const Request& req));
    int baseRequest(Response& res, const Request& req)
    {
        return service_class::request(res, req);
    }
};
并以这种方式执行您的
EXPECT\u调用

EXPECT_CALL(mock_service, request(_,_))
    .WillOnce(Invoke(&mock_servide, 
                     &mock_service_class::baseRequest));
也许我能帮上忙。