gpt4 book ai didi

c - 我怎么能模拟 void 类型的函数?

转载 作者:行者123 更新时间:2023-11-28 21:38:06 24 4
gpt4 key购买 nike

我有一个 void insert 函数,我想测试它是否正确插入。我正在使用 CMocka 框架进行测试。

我尝试执行 dpl_insert(ret, "mock_value") 而不是 will_return() 但似乎没有值附加到列表中。

t_list **dpl_create();
int ft_list_size(t_list *self);

void __wrap_dpl_insert(t_list **self, void *data)
{
check_expected(self);
check_expected(data);
}

static void test_dpl_insert_empty_list(void **state)
{
(void) state;
t_list **ret = dpl_create(); //Initialization of an empty struct.
int ret_size;

expect_value(__wrap_dpl_insert, self, ret);
expect_value(__wrap_dpl_insert, data, "mock_value");

will_return(__wrap_dpl_insert, XXX); //PROBLEM RESIDES HERE.

ret_size = ft_list_size(*ret);
fprintf(stderr, "Size of the list=>%d\n", ret_size);
}

使用 dpl_insert(ret, "mock_value") fprintf() 打印 0,就像没有添加任何元素一样。

我的目标是从 fprintf() 获得 1。

最佳答案

我想到了这个解决方案。

static void test_dpl_insert_empty_list(void **state)                                                                                                                                                       
{
(void) state; /* unused */
t_list **ret;
t_list *beg;
int count, data;

count = 0;

will_return(__wrap_dpl_create, malloc(sizeof(t_list)));
ret = dpl_create();
dpl_insert(ret, (void*)1);
dpl_insert(ret, (void*)2);
dpl_insert(ret, (void*)3);

beg = *ret;
while(beg != NULL)
{
data = (intptr_t)beg->data;
assert_int_equal(++count, data);
beg = beg->next;
}
}

我没有使用 __wrap_dpl_insert(),而是使用了原始函数 dpl_insert()。我想知道这是否是最好的方法。

关于c - 我怎么能模拟 void 类型的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55832949/

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