usm*_*man 5 c++ googletest googlemock
我有一个模拟功能:
MOCK_METHOD4(my_func, int(double, double, void* (*cb) (int), int p1));
Run Code Online (Sandbox Code Playgroud)
我想以第三个参数作为参数调用上述函数的第二个(基于0的)参数,即,以“ p1”作为参数调用“ cb”函数。我怎样才能做到这一点?
我可以使用InvokeArgument调用带有某些自定义值的“ cb”:
ON_CALL(mockObj, my_func(_, _, _, _)).
WillByDefault(DoAll(
IgnoreResult(InvokeArgument<2>(10)),
Return(0)));
Run Code Online (Sandbox Code Playgroud)
但是我想使用传递给相同的模拟函数调用的实际参数来调用它。
您可以定义一个ACTION来调用您的回调。像下面这样:
ACTION(CallCb) {
arg2(arg3);
}
...
ON_CALL(*mockObj, my_func(_, _, _, _))
.WillByDefault(
DoAll(CallCb(),
Return(0)));
Run Code Online (Sandbox Code Playgroud)
由于按DoAll顺序处理操作,您可以将第三个参数值保存到外部变量,然后使用该变量作为参数调用第二个参数。
int p;
ON_CALL(mockObj, my_func(_, _, _, _)).
WillByDefault(DoAll(
SaveArg<3>(&p),
IgnoreResult(InvokeArgument<2>(p)),
Return(0)));
Run Code Online (Sandbox Code Playgroud)