【问题标题】:How to call const std::function<>& parameter in mock expectation?如何在模拟期望中调用 const std::function<> 和参数?
【发布时间】:2016-12-02 10:03:56
【问题描述】:
我已经模拟了这样的函数:
virtual void MyClass::foo(const std::function<void()>& callback);
我想为foo设定期望:
EXPECT_CALL(MyClassMock, foo(testing::_));
然后我想在满足期望时调用收到的回调。
如何使用 gmock 做到这一点?
【问题讨论】:
标签:
c++
unit-testing
c++11
gmock
【解决方案1】:
我尚未对此进行测试,但原理应该可以帮助您。
更改您的 EXPECT_CALL 以重复调用函数。此函数应该是全局/静态的,可能与您的期望位于同一文件中。 Invoke 自动转发参数,因此参数列表应该匹配。
EXPECT_CALL(MyClassMock, foo(testing::_))
.WillRepeatedly(Invoke(myCallbackFunc));
...
static void myCallbackFunc(const std::function<void()>& callback)
{
callback();
}
EXPECT 之后调用函数的更多方法可以在GoogleMock Cheat Sheet 上看到。
【解决方案2】:
选项 #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();}));