googletest gmock:测试 C 风格的回调函数

问题描述 投票:0回答:0

需要使用 gooogletest gmock 测试 C 风格回调函数的建议。

很容易测试用

std::function
定义的回调。 这两个主题帮助很大:

  1. 使用谷歌测试来检查回调
  2. 如何使用 gmock 模拟 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();
}
unit-testing function-pointers googlemock
© www.soinside.com 2019 - 2024. All rights reserved.