我有一个 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)
一个函数做一些没有被外部反映的事情有什么意义呢?您需要将
add
指针更改为函数。
您有很多选择,所有这些都包括向静态方法添加参数,或返回值:
static void add_static_callback(int& res, int a, int b)
{
res = a+b;
}
//call with:
add(m_value, 1, 2);
add
指向函数的指针。