【发布时间】:2015-03-13 20:34:09
【问题描述】:
我有一个模拟方法。当它被调用时,我希望它在调用它的正常行为之前调用另一个函数。类似的东西:
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),
));
我在文档中寻找过这样的东西,但没有成功。
在Using a Function or a Functor as an Action,我们有:
Invoke(f)、Invoke(object_pointer, &class::method)、InvokeWithoutArgs(f)、InvokeWithoutArgs(object_pointer, &class::method)在调用模拟函数时只会转发(或不转发)提供给模拟函数的参数。InvokeArgument<N>(arg1, arg2, ..., argk)似乎是为了调用参数之一。
-
WithArg<N>(a)和WithArgs<N1, N2, ..., Nk>(a)似乎是选择从原始函数中转发哪些参数。
我想我遗漏了一些非常明显的东西,但我有点卡在这里,所以任何建议都会有所帮助。
【问题讨论】:
标签: c++ unit-testing parameters mocking googlemock