代码之家  ›  专栏  ›  技术社区  ›  duong_dajgja

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

  •  1
  • duong_dajgja  · 技术社区  · 8 年前

    我想用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)));
    

    我怎么能 SetArgReferee 对于 Response& res const Request& req res.req_id = req.req_id; res.response = 2 * req.request; ?

    1 回复  |  直到 8 年前
        1
  •  1
  •   PiotrNycz    8 年前

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

    reqest 在模拟类MockService中-然后使用 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));
    
    推荐文章