从 EXPECT_CALL 将函数参数保存到模拟方法

Sup*_*Fly 5 c++ callback googletest

我有一个类通过调用 subscribe(callbackfunction)“订阅”来自组件的信号。我现在尝试使用 gtest/gmock 测试此行为,方法是保存回调并稍后向其发送数据以测试该组件的其他部分。

\n

测试代码:

\n
using callback = std::function<void(const int*)>;\ncallback cb;\n\nEXPECT_CALL(*mock_data, Subscribe).WillOnce(SaveArg<0>(cb));\n
Run Code Online (Sandbox Code Playgroud)\n

gmock代码(mock_data):

\n
MOCK_METHOD(bool, Subscribe, (std::function<void(const int*)> cb), (const));\n
Run Code Online (Sandbox Code Playgroud)\n

我从编译器得到这个:

\n
error: cannot convert \xe2\x80\x98testing::internal::SaveArgAction<0, std::function<void(const int*)> >\xe2\x80\x99 to \xe2\x80\x98const testing::Action<bool(std::function<void(const int*)>)>&\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n

有没有办法真正做我想做的事?

\n

S.M*_*.M. 3

SaveArg<N>(pointer)需要一个存储参数的位置/指针。

EXPECT_CALL(*mock_data, Subscribe).WillOnce(SaveArg<0>(&cb));
Run Code Online (Sandbox Code Playgroud)