2017-07-26 117 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)); 
相關問題