我该如何模拟void类型函数?

时间:2019-04-24 14:51:23

标签: c unit-testing testing cmocka

我有一个无效的插入功能,我想测试它是否正确插入。我正在使用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。

1 个答案:

答案 0 :(得分:0)

我想出了这个解决方案。

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