如何调用传递给Mock方法的函数指针?

时间:2015-12-18 02:42:17

标签: c++ googletest googlemock

virtual void doSomething(std::function<void(std::error_code result)> callback) = 0

MockMethod1(doSomething, std::function<void(std::error_code result)> callback);

现在当我写EXPECT_CALL时,如何调用&#34;回调&#34;

EXPECT_CALL(object, doSomething(testing::_)).WillRepeatedly( ??? );

我应该写什么来打电话回电话?

2 个答案:

答案 0 :(得分:3)

使用自定义操作来实现此目的。为了获得更大的灵活性,我建议为一个动作创建一个模板,其中template参数表示doSomething中回调函数的参数索引。这是你如何做到这一点:

ACTION_TEMPLATE(ExecuteCallback, HAS_1_TEMPLATE_PARAMS(unsigned, uIndex), AND_1_VALUE_PARAMS(callbackArg))
{
    (std::get<uIndex>(args))(callbackArg);
}

请注意,如果需要,您可以添加更多值参数。现在,在您测试中,您可以调用这样的设置模拟调用:

EXPECT_CALL(object, doSomething(testing::_)).WillRepeatedly(DoAll(ExecuteCallback<0>(err), Return()));

答案 1 :(得分:3)

无需进行自定义操作。

我发现答案的方式不同, 这是你需要做的,

EXPECT_CALL(.....)。WillRepeatedly(testing :: InvokeArgument&lt; 1&gt;(arg1,arg2,..));