如何调用const std :: function<>&模拟期望中的参数?

时间:2016-12-02 10:03:57

标签: c++ unit-testing c++11 gmock

我嘲笑过像:

这样的功能
virtual void MyClass::foo(const std::function<void()>& callback);

我想为foo

设定期望值
EXPECT_CALL(MyClassMock, foo(testing::_));

然后我希望在满足期望时调用收到的回调。

如何使用gmock做到这一点?

2 个答案:

答案 0 :(得分:0)

我没有对此进行测试,但原则应该让你到那里。

EXPECT_CALL更改为重复调用某个功能。此函数应该是全局/静态的,可能与您的期望位于同一个文件中。 Invoke会自动转发参数,以便参数列表匹配。

EXPECT_CALL(MyClassMock, foo(testing::_))
    .WillRepeatedly(Invoke(myCallbackFunc));

...

static void myCallbackFunc(const std::function<void()>& callback)
{
    callback();
}

GoogleMock Cheat Sheet上可以看到EXPECT之后调用函数的更多方法。

答案 1 :(得分:0)

选项#1

EXPECT_CALL(MyClassMock, foo(testing::_))
    .Times(1) 
    .WillOnce(testing::InvokeArgument<0>());

选项#2

EXPECT_CALL(MyClassMock, foo(testing::_))
    .Times(1)
    .WillOnce(testing::Invoke([](std::function<void()> f){f();}));