Правильный способ временно включить и отключить перенос функции в cmocka?

Я использую библиотеку cmocka для тестирования некоторого встроенного кода C. Согласно документации я использую __wrap_ префикс для имитации функций, чтобы я мог изолировать свои модульные тесты. Однако, как только я это сделаю, все вызовы функции навсегда перейдут к функции с упаковкой. Как я могу повторно включить реальную функцию в определенных обстоятельствах, чтобы я мог проверить ее или позволить другим функциям использовать ее? Мне кажется, единственный способ - использовать глобальное поле в качестве переключателя для вызова реальной функции следующим образом:

int __wrap_my_function(void) {
    if (g_disable_wrap_my_function) {
        return __real_my_function();
    }

    // ... do mock stuff
}

Это правильный путь?

2 ответа

Решение

Я сделал именно то, что предложил в своем вопросе. Я использовал глобальную переменную, которую я проверял в завернутой функции, чтобы отключить и отключить насмешку во время выполнения.

Вы просто компилируете без опции командной строки -wrap или используете определения.

#include <cmocka.h>
#ifdef UNIT_TESTING
#define strdup test_strdup
#endif

Добавьте фиктивную функцию test_strdup. Теперь вы можете использовать эту функцию для тестирования.

Другие вопросы по тегам