GoogleMock:如何根据另一个输入参数设置ArgReferee?
GoogleMock: How to SetArgReferee according to another input parameter?
我想使用 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)));
如何根据传入的 const Request& req
,即 res.req_id = req.req_id;
和 res.response = 2 * req.request;
来 SetArgReferee
得到 Response& res
?
您的代码看起来不像是可以被嘲笑的东西 - 但我想这只是问题的例证。
所以假设你在模拟 class MockService 中模拟了函数 reqest
- 然后使用 Invoke Action
和你的 request
函数作为参数:
EXPECT_CALL(mock_service, request(_,_)).WillOnce(Invoke(&request));
如果您只想调用基础 class 函数 - 那么请执行以下操作:
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_CALL
这样做:
EXPECT_CALL(mock_service, request(_,_))
.WillOnce(Invoke(&mock_servide,
&mock_service_class::baseRequest));
我想使用 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)));
如何根据传入的 const Request& req
,即 res.req_id = req.req_id;
和 res.response = 2 * req.request;
来 SetArgReferee
得到 Response& res
?
您的代码看起来不像是可以被嘲笑的东西 - 但我想这只是问题的例证。
所以假设你在模拟 class MockService 中模拟了函数 reqest
- 然后使用 Invoke Action
和你的 request
函数作为参数:
EXPECT_CALL(mock_service, request(_,_)).WillOnce(Invoke(&request));
如果您只想调用基础 class 函数 - 那么请执行以下操作:
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_CALL
这样做:
EXPECT_CALL(mock_service, request(_,_))
.WillOnce(Invoke(&mock_servide,
&mock_service_class::baseRequest));