Как я мог издеваться над функцией типа void? - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть функция void insert, и я хочу проверить, правильно ли она вставляется. Я использую CMocka Framework для тестирования.

Я пытался сделать 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, как если бы ни один элемент не был добавлен.

Моя цель - получить 1 от fprintf().

1 Ответ

0 голосов
/ 25 апреля 2019

Я придумал это решение.

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().Мне интересно, если это лучший подход для этого.

...