【问题标题】:GoogleMock: How to SetArgReferee according to another input parameter?GoogleMock:如何根据另一个输入参数设置ArgReferee?
【发布时间】:2017-07-26 03:08:42
【问题描述】:

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

【问题讨论】:

  • 也许this 可以提供帮助。

标签: c++ unit-testing googletest googlemock


【解决方案1】:

您的代码看起来不像可以模拟的东西 - 但我想这只是问题的说明。

因此,假设您在模拟类 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));

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2017-05-05
    • 2016-01-07
    相关资源
    最近更新 更多