首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用cmocka库模拟第三方库中不可修改的函数?

如何使用cmocka库模拟第三方库中不可修改的函数?
EN

Stack Overflow用户
提问于 2019-03-26 17:32:34
回答 1查看 883关注 0票数 1

我正在尝试使用cmocka编写一个测试用例library.My测试用例测试一个函数,该函数然后在内部调用来自第三方库的函数(无法修改库).This函数在应用程序未启动和运行时返回空值,所以我想模拟此第三方库function.How的返回值我可以做到这一点吗?

我尝试过使用cmocka的will_return函数来获取想要的返回值,但是不起作用

代码语言:javascript
复制
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().How来处理这种情况?

我想要获得期望的值作为我的第三方函数的返回值。

EN

回答 1

Stack Overflow用户

发布于 2019-03-28 18:46:48

您尝试过__wrap_标志吗?

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

代码语言:javascript
复制
FILE * __wrap_fopen(const char *__restrict __filename,
                const char *__restrict __modes)
{
  return mock_ptr_type(FILE*);

}

并将指令添加到gcc,如下所示:

代码语言:javascript
复制
$ gcc -g -Wl,--wrap=fopen

希望它能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55353763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档