【问题标题】: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();}));
      

      【讨论】:

        猜你喜欢
        • 2021-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多