Jen*_*ich 4 c++ googletest googlemock
我使用 Gmock 进行方法调用,它返回 QList heightsFromCsvResult 的元素作为 out 参数。这是当前工作的代码:
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)));
Run Code Online (Sandbox Code Playgroud)
第一个参数 lineNumber 来自
getGeometryHeightValues(int lineNumber, QPair<QString, QString>)
Run Code Online (Sandbox Code Playgroud)
是 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)));
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用,因为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)));
Run Code Online (Sandbox Code Playgroud)
除非你需要mockLineNumber做其他事情,否则你可以删除那部分。
归档时间: |
|
查看次数: |
12925 次 |
最近记录: |