gpt4 book ai didi

c - 如何使用 cmocka 库模拟无法修改的第三方库中的函数?

转载 作者:太空宇宙 更新时间:2023-11-04 04:12:52 24 4
gpt4 key购买 nike

我正在尝试使用 cmocka 库在 c 中编写一个测试用例。我的测试用例正在测试一个函数,然后在内部调用来自第 3 方库的函数(无法修改库)。当应用程序不是时,此函数返回 NULL 值启动并运行,所以我想模拟这个第 3 方库函数的返回值。我该如何实现?

我试过使用cmocka的will_return函数来获取期望的返回值,但是它不起作用

void third_party_func()
{
return mock();
}
void my_func_to_be_tested()
{
int ret;
ret = third_party_func();
return ret;
}
void test_do_mytest(void ** state)
{
(void) state;
int ret;
will_return(third_party_func,1);
ret = my_func_to_be_tested();
assert_int_equal(1,ret);
}
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_do_mytest),
};


int main(void)
{
return cmocka_run_group_tests(tests, NULL, NULL);
}

我得到了 third_party_func() 的多个定义的编译错误。如何处理这种情况?

我想获得所需的值作为我的第三方函数的返回值。

最佳答案

您尝试过 __wrap_ 标志吗?

将函数的名称从 third_party_func 更改为 __wrap_third_party_func 并将以下指令添加到 gcc 中,例如使用 fopen 函数:

FILE * __wrap_fopen(const char *__restrict __filename,
const char *__restrict __modes)
{
return mock_ptr_type(FILE*);

}

并将指令添加到 gcc,如:

$ gcc -g -Wl,--wrap=fopen

希望对您有所帮助!

关于c - 如何使用 cmocka 库模拟无法修改的第三方库中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55353763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com