如何使用 gmock 来模拟 std::function?

zee*_*jan 5 testing tdd unit-testing googletest googlemock

我的类的构造函数是

A( ...
   std::function<bool(const std::string&, const std::string&)> aCallBack, 
   ... );
Run Code Online (Sandbox Code Playgroud)

我想用 EXPECT_CALL 来测试它。这个回调来自另一个 B 类。我创建了一个 Mock 像

class BMock : public B
{
    MOCK_METHOD2( aCallBack, bool(const std::string&, const std::string&) );
}
Run Code Online (Sandbox Code Playgroud)

然后我试过了

B *b = new B();
std::function<bool(const std::string&, const std::string&)> func = 
    std::bind(&B::aCallBack, b, std::PlaceHolders::_1, std::PlaceHolders::_2);
Run Code Online (Sandbox Code Playgroud)

它仍然不起作用。如何获取 gmock 对象的函数指针?

谢谢!!

小智 17

如果您想使用模拟来跟踪调用并设置返回值,您可以使用MockFunction.

using testing::_;
using testing::MockFunction;
using testing::Return;

MockFunction<bool(const std::string&, const std::string&)> mockCallback;

EXPECT_CALL(mockCallback, Call(_, _)).WillOnce(Return(false)); // Or anything else you want to do

A( ...
   mockCallback.AsStdFunction()
   ...);

Run Code Online (Sandbox Code Playgroud)

  • 这是金色的。一直在多个相关的堆栈溢出帖子中寻找此内容,您的答案是我发现的第一个提到 MockFunction 并提供完整示例的答案。 (4认同)