Как передать массив int в аргумент void * макетного метода в тестировании Google?

#gmock

#googlemock

Вопрос:

Я пытаюсь смоделировать интерфейс 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:

strcpy_s было ли расширение Microsoft для C, чтобы иметь возможность обнаруживать определенные ошибки переполнения буфера во время выполнения, которые «недавно» были стандартизированы как необязательная функция в C11. Приведенное вами сообщение об ошибке не указывает на какие-либо проблемы с Google Test или Goolge Mock, но, очевидно, ваш компилятор не настроен на понимание strcpy_s . Пожалуйста, обратите внимание, что, хотя strcpy_s это опция в C11, ее нет ни в одном стандарте C . Вам необходимо скомпилировать исходный код на C , чтобы иметь возможность использовать Google Test или Google Mock.

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