Функции насмешки с cmocka

#unit-testing #embedded #cmocka

Вопрос:

Я пытаюсь издеваться над некоторыми функциями, используя cmocka:

 void test_led_driver_NeedToImplement(void **state)
{
       
    state_t current = CLEAR;
    will_return(led_status_toggel,SET);
    
    TEST_ASSERT_EQUAL(SET, led_status_toggel(current));
}
 

Но я получаю ошибку: led_status_toggel() имеет оставшиеся невозвращенные значения.
Нужно ли мне создавать макет файла для моих функций или в чем источник этой ошибки?
Ps: Я использую unity.h как библиотека утверждений.

Ответ №1:

Согласно вашему тесту, это соответствует той функции, которую вы тестируете led_status_toggel . Если это так, вы не должны насмехаться над этим. Вам следует просто удалить will_return(led_status_toggel,SET); , так как у вас led_status_toggel , вероятно, что-то вроде этого (вы не делитесь этим, поэтому я точно не знаю).:

 state_t led_status_toggel(state_t state)
{
    if (state == CLEAR)
    {
        return SET;
    }       
    return CLEAR;
}
 

Если ваша тестируемая функция не led_status_toggel является , а какая-то другая (о которой вы не упомянули), которая вызывает это led_status_toggel , вы можете издеваться над этой функцией следующим образом

 state_t __wrap_led_status_toggel(state_t state)
{
    return (state_t)mock();
}
 

и используйте -Wl,--wrap=led_status_toggel в своей команде сборки. С --wrap флагом компоновщика при выполнении теста __wrap_led_status_toggel вместо оригинала будет вызвана функция макета led_status_toggel .