Существует множество переменных, которые будут определять наилучшую среду для модульного тестирования, которая будет использоваться в вашей ситуации. Некоторые элементы, которые могут повлиять на ваш выбор:
- Целевой язык.
- Какая поддержка библиотеки доступна. например, libc или его урезанная версия.
- Операционная система цели. например, None, FreeRTOS, пользовательский.
Большинство структур типов xUnit обеспечивают некоторый базовый уровень функциональности, который может быть полезен. Я использовал Cunit с некоторым успехом в прошлом. (пакет libcunit1-dev для Ubuntu / Debian). Для большинства сред требуется наличие libc, для некоторых потребуется дополнительная поддержка ОС.
Другая альтернатива длиной всего 3 строки - это Minunit .
Я обнаружил, что модульное тестирование с использованием микроконтроллера в качестве цели довольно обременительно, поскольку вам необходимо представить среду, подходящую для загрузки тестов, их запуска и последующего получения результатов. Просто установить платформу, которая позволит вам сделать это, является большой задачей.
Другой подход, который я выбрал и который работал для меня, заключается в проведении модульного тестирования на хосте, реализующего уровень абстракции между драйверами и кодом приложения. Поскольку вы используете gcc для цели, код должен также компилироваться на хосте.
Тестирование на хосте компиляции, как правило, намного проще, так как у вас есть полная поддержка ОС хоста и всех ее инструментов. Например, при тестировании на хосте у меня есть поддельная версия моего беспроводного драйвера с тем же интерфейсом, что и у реального драйвера, который работает на цели. Версия хоста использует UDP-пакеты для имитации беспроводной передачи пакетов, а фиктивный драйвер поддерживает возможность отбрасывать пакеты, чтобы я мог проверить свои протоколы.
В продукте, над которым я работал, использовалась многопоточная ОС, поэтому уровень абстракции для тестирования на хост-ОС использовал вместо этого pthreads.
Хотя это и не идеально, чем проще для вас писать и запускать тесты, тем больше у вас шансов реализовать больше тестовых случаев. Еще одним преимуществом выполнения кода на разных платформах является проверка его переносимости. Вы быстро обнаружите ошибки порядка байтов, если архитектура получателя и хоста различаются.
Сейчас я немного не в теме, но чувствую, что эти идеи могут помочь с выбором платформы тестирования и методов тестирования.