Как обрабатывать параметры в поддельном методе gmock

#c #tdd #googlemock

#c #tdd #googlemock

Вопрос:

У меня есть метод, который будет принимать аргумент out (т.Е. Ссылку на uint64_t) Как я могу издеваться над этим в Gmock? Кроме того, при вызове этого метода я хочу установить значение переданной ссылки на то, что я желаю. Может ли это быть достигнуто с помощью Gmock?

Ответ №1:

Да, вот минимальный пример:

 struct Iface {
    virtual ~Iface() = default;
    virtual void foo(uint64_tamp; a) = 0;
};

struct Mock : public Iface {
    MOCK_METHOD1(foo, void(uint64_tamp; a));
};

TEST(MockTest, TestSetArgReferee) {
    uint64_t some_val = 0;

    Mock some_mock{};

    EXPECT_CALL(some_mock, foo(testing::_)).WillOnce(testing::SetArgReferee<0>(42));

    some_mock.foo(some_val);

    ASSERT_EQ(42U, some_val);

}
 

Ключевым моментом здесь является SetArgReferee то, что устанавливает i-й аргумент foo (индексируется с 0, поэтому SetArgReferee<0> устанавливает 1-й аргумент метода макета, SetArgReferee<1> устанавливает 2-й аргумент и т. Д.). Дополнительную информацию см. В кулинарной книге.