Об этом проекте

AutoFFF — это утилита на Python, предназначенная для автоматической генерации фейковых определений FFF (Fake Functions Framework) для заголовочных файлов C API, решающая распространённую проблему при unit-тестировании встроенного C-кода. Основная проблема, которую она решает, заключается в том, что тестирование встроенного C-кода на хостовой машине часто невозможно, поскольку архитектура хоста отличается от целевой платформы, а встроенные среды обычно не поддерживают динамическую линковку, при этом сам C не имеет встроенных возможностей runtime-рефлексии для манипуляции тестируемым кодом во время выполнения. Фейкинг API целевой платформы путём линковки тестируемого кода с фейковыми реализациями решает эту задачу, но ручное написание фейковых определений для функций API является трудоёмким, громоздким и подверженным ошибкам процессом; вручную поддерживаемые тестовые заголовки подвержены «деградации кода» по мере эволюции оригинальных API. AutoFFF автоматизирует этот процесс, анализируя заголовочные файлы C API и генерируя готовые к использованию тестовые заголовки с FFF-совместимыми фейковыми определениями. Инструмент следует философии «обёртывания» (wrapping): сгенерированные тестовые заголовки включают оригинальный заголовочный файл API для наследования всех объявлений типов, переменных и функций, добавляя только необходимые фейковые определения. Такой подход гораздо более удобен в поддержке, чем альтернативная стратегия «запрета» (banning), которая требует ручного повторного объявления всех элементов API и более склонна к рассинхронизации с оригинальными заголовками. Инструмент включает встроенное решение для функций, определённых непосредственно внутри заголовочных файлов, которые normally вызывают ошибки переопределения при фейкинге. Это решение использует macro re-routing для перенаправления вызовов оригинальной in-header функции на сгенерированный фейк, при условии что тестовый заголовочный файл включён до тестируемого кода в тестовых файлах. AutoFFF поддерживает работу с библиотеками со строгими политиками включения (такими как FreeRTOS или CMSIS) благодаря опциям командной строки для инъекции необходимых заголовков или определения препроцессорных макросов во время анализа. Предлагаются несколько вариантов интеграции: инструмент можно запускать как автономный командный модуль, использовать как Python-пакет в пользовательских скриптах или интегрировать в системы сборки типа Make через предоставленные пример Makefiles. Он предоставляет два режима генератора: BareFakeGenerator выдаёт только сырые FFF-макроопределения без заголовочного шаблона для пользователей, желающих добавить собственную обработку, тогда как SimpleFakeGenerator производит минимально жизнеспособные компилируемые тестовые заголовки с include guards и необходимыми includes «из коробки». AutoFFF распространяется под лицензией MIT, доступен через PyPI и требует коллекцию заголовочных файлов fake_libc_include проекта pycparser для C-анализа, которая не включается в pip-релиз и должна быть получена отдельно из репозитория pycparser.