gpt4 book ai didi

c++ - 将方法参数传递给 googlemock 中的操作

转载 作者:太空狗 更新时间:2023-10-29 21:05:36 25 4
gpt4 key购买 nike

我使用 Gmock 进行方法调用,它返回 QList heightsFromCsvResult 的一个元素作为输出参数。这是当前工作的代码:

EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(0)), Return(true)))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(1)), Return(true)))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(2)), Return(true)))
.WillOnce(DoAll(SetArgReferee<1>(heightsFromCsvResult.at(3)), Return(true)));

第一个参数lineNumber来自

getGeometryHeightValues(int lineNumber, QPair<QString, QString>) 

是 heightsFromCsvResult.at(lineNumber) 的索引。

现在我尝试以更通用的方式使用 Gmock:

int* mockLineNumber = new int;
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
.Times(4)
.WillRepeatedly(DoAll(SaveArg<0>(mockLineNumber), SetArgReferee<1>(heightsFromCsvResult.at(*(mockLineNumber))), Return(true)));

但是这段代码不起作用,因为 mockLineNumber 从来不是 Gmock 写的。但是 EXPECT_CALL 是满足的。

有人看到代码中的问题吗?

最佳答案

在同一个 EXPECT_CALL 中使用带有 SaveArg 的变量集似乎不起作用,您可以做的是通过一个自定义操作 设置第二个参数,使用参数 0 作为传递容器的索引。

ACTION_P(SetArg1WithValueFromPassedArgumentUsingArg0AsIndex, param)
{
arg1 = param.at(arg0);
}

int* mockLineNumber = new int;
EXPECT_CALL(*_mockAttributeRepository, getGeometryHeightValues(_,_))
.Times(4)
.WillRepeatedly(DoAll(SaveArg<0>(mockLineNumber), SetArg1WithValueFromPassedArgumentUsingArg0AsIndex(heightsFromCsvResult), Return(true)));

除非您需要 mockLineNumber 作为其他用途,否则您可以删除该部分。

关于c++ - 将方法参数传递给 googlemock 中的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com