#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
.