使用googlemock模拟const指针参数的副作用

3

我正在使用googlemock进行单元测试,并试图模拟一个具有“输出数组参数”的方法:

void MyMock::myFunc(double myVal[2]).

方法myFunc应该将值存储在myVal数组中。

我该如何模拟这个副作用呢?我尝试了下面的方法:

double a_mockedValues[] = {1., 2.};
ON_CALL(myMock, myFunc(_)).WillByDefault(SetArgPointee<0>(a_mockedValues));

我希望myFunc的调用者可以将值1和2传递给它所传递给模拟方法的数组中。

然而,这种做法不起作用。编译器会出现类似以下的错误提示:

不能为数组指定显式的初始化程序。

有人知道如何模拟这种参数的行为吗?

谢谢。

1个回答

3
实际上,针对这种特定用例有一个谓词:SetArrayArgument(请参见Google Mock CookBook)。
您的代码将变成:
double a_mockedValues[] = { 1., 2. };
ON_CALL(myMock, myFunc(_)).WillByDefault(SetArrayArgument<0>(a_mockedValues, a_mockedValues + 2));

非常感谢,这正是我想要的。尽管我得到了一个巨大的编译器警告:std::_Copy_impl':带有可能不安全参数的函数调用...但我想除了抑制警告或使用其他东西而不是数组之外,我别无选择。 - anhoppe
你有最新版本的Google Mock吗?头文件包含一个指令,可以自动禁用此警告,但仅在定义了_MSC_VER的情况下。另外,请通过点击左侧的复选标记“接受”此答案。 - rmhartog
抱歉,忘记进行检查了,很抱歉。是的,我可以禁用警告。谢谢。 - anhoppe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接