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

GoogleMock: How to SetArgReferee according to another input parameter?

本文关键字:参数 设置 ArgReferee 输入 另一个 何根 GoogleMock      更新时间:2023-10-16

我想用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& reqSetArgRefereeResponse& res,即res.req_id = req.req_id;res.response = 2 * req.request;

你的代码看起来不像可以被嘲笑的东西——但我想这只是问题的例证。

因此,假设您在模拟类 MockService 中模拟了函数reqest- 然后将Invoke Action与您的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_CALL

EXPECT_CALL(mock_service, request(_,_))
.WillOnce(Invoke(&mock_servide, 
&mock_service_class::baseRequest));