我嘲笑过像:
这样的功能virtual void MyClass::foo(const std::function<void()>& callback);
我想为foo
:
EXPECT_CALL(MyClassMock, foo(testing::_));
然后我希望在满足期望时调用收到的回调。
如何使用gmock做到这一点?
答案 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)
EXPECT_CALL(MyClassMock, foo(testing::_))
.Times(1)
.WillOnce(testing::InvokeArgument<0>());
EXPECT_CALL(MyClassMock, foo(testing::_))
.Times(1)
.WillOnce(testing::Invoke([](std::function<void()> f){f();}));