需要使用 gooogletest gmock 测试 C 风格回调函数的建议。
很容易测试用
std::function
定义的回调。
这两个主题帮助很大:
但不幸的是我的环境不能使用
std::
命名空间(Arduino AVR 平台)。
因此,如果我从 std::function
更改为 C 风格的回调,例如:
typedef void (*CallbackFunction)(void *);
然后它不编译,我得到以下错误:
error: cannot convert ‘std::function<void(void*)>’ to ‘Foo::CallbackFunction’ {aka ‘void (*)(void*)’}
感谢任何帮助。
请看下面的代码:
#include <gtest/gtest.h>
#include <gmock/gmock.h>
using ::testing::_;
using ::testing::MockFunction;
using ::testing::Return;
class Foo
{
public:
using CallbackFunction = std::function<void(void *)>; //* works just fine
// typedef void (*CallbackFunction)(void *); //! doesn't work
void SetCallback(CallbackFunction callback)
{
_callback = callback;
}
void InvokeCallback()
{
_callback(nullptr);
}
private:
CallbackFunction _callback;
};
class FooTest : public testing::Test
{
public:
using CallbackFunctionMock = testing::MockFunction<void(void *)>;
CallbackFunctionMock callbackFunctionMock;
};
TEST_F(FooTest, simple)
{
EXPECT_CALL(callbackFunctionMock, Call(_)).Times(1);
Foo foo;
foo.SetCallback(callbackFunctionMock.AsStdFunction());
foo.InvokeCallback();
}