как установить custom ref-variable в gmock

Я использую gmock в своем проекте, и я сталкиваюсь с проблемой установки пользовательской ссылочной переменной для макетной функции. Предположим, у меня есть класс:

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

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

есть класс Client XXXRunner::сделать используя XXXClient::QueryXXX, и я хочу, чтобы поглумиться XXXClient чтобы проверить XXXRunner::сделать.

проблема заключается в том, что второй параметр QueryXXX ,то есть "Response", не является возвращаемым значением, а ссылочной переменной, в которую я заполняю некоторые данные Ответ в XXXClient:: QueryXXX. Я хочу установить пользовательские данные для ответа, чтобы проверить другое состояние XXXRunner:: DoSomething.

платформа gmock может установить ожидаемое возвращаемое значение, но я не могу найти способ установить "возвращаемую переменную" ?

Итак, как это сделать?

2 ответов


во-первых, сделать XXXClient макет класса, давайте назовем его XXXClientMock следующим образом:

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

затем используйте действие GMock SetArgReferee чтобы установить пользовательский параметр, как показано ниже:

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

резюме
GMock предоставляет ряд действий, чтобы сделать его удобным для макетов функций, таких как SetArgReferee для справки или значения SetArgPointee для указателя, Return для возврата, Invoke for invoke custom mock function (с простой логикой тестирования), вы можете увидеть здесь для получения более подробной информации.

наслаждайтесь :) Спасибо


Проверьте SetArgReferee в Google Mock шпаргалка.