我有一个void插入函数,我想测试它是否正确插入。我正在使用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=>%dn", 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()
。我想知道这是否是最好的方法。