c++中使用c回调注册函数的方法(google测试)

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

我有一个 c 文件可以从 google test 进行测试。它有一个回调函数及其注册函数。 如何为 gtest 注册回调?这是示例代码:

#include <gtest/gtest.h>

/////////////////////////////////////////
// I have this code in c file
/////////////////////////////////////////
void (*add)(int a, int b);

void RegisterAddCallback(void (*callback)(int a, int b))
{
    add = callback;
}
/////////////////////////////////////////

// I use this way currently
// static int s_value;
// static void add_static_callback(int a, int b)
// {
//     s_value = a + b;
// }

class CallbackTests : public ::testing::Test
{
public:
    int m_value;
    void SetUp() override
    {
        m_value = 0;
    }   

    static void add_static_callback(int a, int b)
    {
        // can't add m_value here, but I need it
        int value = a + b;
    }
};

TEST_F(CallbackTests, StaticCallback)
{
    RegisterAddCallback(add_static_callback);
    add(1, 2);
    EXPECT_EQ(m_value, 3);

}

这是测试结果。我想通过使用夹具将 m_value 设为 3。但我对任何工作方式都持开放态度。

Expected equality of these values:
  m_value
    Which is: 0
  3
[  FAILED  ] CallbackTests.StaticCallback (0 ms)
c++ callback googletest
1个回答
0
投票

一个函数做一些没有被外部反映的事情有什么意义呢?您需要将

add
指针更改为函数。

您有很多选择,所有这些都包括向静态方法添加参数,或返回值:

  1. 添加对结果的引用,例如:
static void add_static_callback(int& res, int a, int b)
{
  res = a+b;
}
//call with:
add(m_value, 1, 2);
  1. 添加返回值,但您需要更改
    add
    指向函数的指针。
© www.soinside.com 2019 - 2024. All rights reserved.