我有一个模拟方法。当它被调用时,我希望它在调用其正常行为之前调用另一个函数。就像是 :
EXPECT_CALL(*my_obj, MockedMethod(_,_,_,_,_,_))
.WillOnce(DoAll(
Invoke(my_obj, &SomeAdditionalMethodIWantToCall),
Invoke(my_obj, &DefaultBehavior),
));
唯一的问题是SomeAdditionalMethodIWantToCall
期望参数与提供给的参数完全无关MockedMethod
。我希望能够提供它们,但我在语法上遇到了困难。我希望有类似的东西(用假语法):
EXPECT_CALL(*my_obj, MockedMethod(_,_,_,_,_,_))
.WillOnce(DoAll(
Invoke(my_obj, &SomeAdditionalMethodIWantToCall, arg1, arg2, arg3),
Invoke(my_obj, &DefaultBehavior),
));
我在文档中寻找过这样的东西,但没有成功。
In 使用函数或函子作为操作, 我们有 :
Invoke(f)
, Invoke(object_pointer, &class::method)
, InvokeWithoutArgs(f)
, InvokeWithoutArgs(object_pointer, &class::method)
它只会在调用时转发(或不转发)提供给模拟函数的参数。
InvokeArgument<N>(arg1, arg2, ..., argk)
似乎是为了调用参数之一。
In 复合动作
-
WithArg<N>(a)
and WithArgs<N1, N2, ..., Nk>(a)
似乎是选择转发原始函数中的哪些参数。
我想我错过了一些非常明显的东西,但我有点卡在这里,所以任何建议都会有帮助。