Правильный способ временно включить и отключить перенос функции в 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. Теперь вы можете использовать эту функцию для тестирования.