C语言 我怎么能模拟 void 类型函数



我有一个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()。我想知道这是否是最好的方法。

相关内容

  • 没有找到相关文章

最新更新