2017-07-26 119 views
1

我想用GoogleMock为嘲弄以下服务:GoogleMock:如何根据另一个输入参数设置ArgReferee?

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))); 

我怎样才能SetArgRefereeResponse& res根据const Request& req传递,即res.req_id = req.req_id;res.response = 2 * req.request;

+0

也许[this](https://stackoverflow.com/a/8987602/1129815)可以提供帮助。 – Steeve

回答

1

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

因此,假如你已经嘲笑功能reqest嘲笑类MockService内 - 然后使用Invoke Actionrequest功能参数:

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)); 
相关问题