如何在Google模拟测试中将int数组传递给模拟方法的void *参数?

时间:2019-04-15 13:21:40

标签: gmock

我正在尝试模拟SPI接口-使用gmock C ++框架进行读取,写入和传输

例如,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 :(得分:0)

strcpy_s是C的 Microsoft扩展,能够在运行时检测某些缓冲区溢出错误,并且“最近”已标准化为可选功能在C11中。您援引的错误消息不会 not 表示Google Test或Goolge Mock有任何问题,但显然您的编译器未配置为理解strcpy_s。请注意,尽管strcpy_s在C11中是一个选项,但在任何C ++标准中都不是。您需要将源代码编译为C ++才能使用Google Test或Google Mock。

这取决于您的编译器如何在C ++模式下启用strcpy_s(或是否可以启用)。