#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-й аргумент и т. Д.). Дополнительную информацию см. В кулинарной книге.