Как передать массив int в void * аргумент метода макета в тесте Google Mock? - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь смоделировать интерфейс SPI - чтение, запись, передача с использованием gmock C ++ framework

Например, SPI - чтение подписи bool SPI_Read (void * rdata, int num_bytes);

Я определил

int device_info[5] = {0x01, 0x02, 0x03, 0x04, 0x05};

ACTION_P(SetArg0ToIntWithSizeArg1, value) { strcpy_s(static_cast<int*>(arg1), arg2, value); }

EXPECT_CALL(spi_obj, SPI_Read(_,_))
      .Times(1)
      .WillOnce(DoAll(SetArg0ToIntWithSizeArg1(device_info),Return(true)));

Я получаю ошибку компиляции: ‘strcpy_s’ was not declared in this scope.

и это верный способ сделать это?

1 Ответ

0 голосов
/ 29 апреля 2019

strcpy_s было расширением Microsoft до C, чтобы иметь возможность обнаруживать определенные ошибки переполнения буфера во время выполнения, которые "недавно" были стандартизированы как дополнительная функция в C11.Цитируемое сообщение об ошибке не указывает на любую проблему с Google Test или Goolge Mock, но, очевидно, ваш компилятор не настроен на понимание strcpy_s.Обратите внимание, что хотя strcpy_s является опцией в C11, она отсутствует в любом стандарте C ++.Вам нужно скомпилировать исходный код как C ++, чтобы иметь возможность использовать Google Test или Google Mock.

Зависит от вашего компилятора, как включить strcpy_s в режиме C ++ (или возможно ли это вообще).

...