how to set custom ref-variable in gmock

我与影子孤独终老i 提交于 2019-11-28 00:07:55

问题


I am using gmock in my project and I meet a problem to set a custom reference variable for a mock function. Suppose I have a class as following:

class XXXClient {
public:
    void QueryXXX(const Request&, Response&);
}; 

class XXXRunner {
public:
    void DoSomething(XXXClient&);
};

There is a Client Class XXXRunner::DoSomething using XXXClient::QueryXXX, and I Want to mock XXXClient to test XXXRunner::DoSomething.

The problem occurs that the second parameter of QueryXXX , that is 'Response', is not a return value, but a reference variable, which I fill some data into Response in XXXClient::QueryXXX. I want to set a custom data for the Response to verify different condition of XXXRunner::DoSomething.

The gmock framework can set expected returned value, but I cannot not find a way to set the "returned variable" ?

So How to do so?


回答1:


First, make a XXXClient mock class, let's name it XXXClientMock as following:

class XXXClientMock : public XXXClient
{
public:
    MOCK_METHOD2(QueryXXX, QueryResult (Request&, Response&));
};

Then, use GMock Action SetArgReferee to set the custom parameter, as following:

TEST(XXXRunnerTC, SetArgRefereeDemo)
{
    XXXCLientMock oMock;

    // set the custom response object
    Response oRsp;
    oRsp.attr1 = “…”;
    oRsp.attr2 = “any thing you like”;

    // associate the oRsp with mock object QueryXXX function
    EXPECT_CALL(oMock,  QueryXXX(_, _)).
        WillOnce(SetArgReferee<1>(oRsp));
    // OK all done

    // call QueryXXX
    XXXRunner oRunner;
    QueryResult oRst = oRunner.DoSomething(oMock);
    …

    // use assertions to verity your expectation
    EXPECT_EQ(“abcdefg”, oRst.attr1);
    ……
}

Summary
GMock provide a series of actions to make it convenient to mock functions, such as SetArgReferee for reference or value, SetArgPointee for pointer, Return for return, Invoke for invoke custom mock function (with simple test logic), you can see here for more details.

Enjoy it :) Thank you




回答2:


Check out the SetArgReferee in the Google Mock cheat sheet.



来源:https://stackoverflow.com/questions/8845753/how-to-set-custom-ref-variable-in-gmock

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!