Я думаю о том, как я могу использовать модульные тесты в моем проекте mcu, и какие фреймворки я могу использовать, чтобы упростить его.
Сегодня я использую stm32 с OpenOCD-jtag с ПК с Linux, где все это управляется из классического Makefile и кросс-компилируется с помощью gcc.
Я мог бы создать что-то сам, но если бы была структура, которую я мог бы использовать, было бы неплохо. (Это бонус, если фреймворк может выводить результат в формате, который может прочитать Дженкинс / Хадсон).
Есть ли способ использовать инфраструктуру модульного тестирования с stm32?
Ответы:
Проверьте CppUTest, и отличный Джеймс Греннинг http://pragprog.com/book/jgade/test-driven-development-for-embedded-c
CppUTest поддерживает C и C ++, и у него есть хороший набор шаблонов Makefile, который довольно быстро начал меня.
источник
Существует множество переменных, которые будут определять наилучшую среду для модульного тестирования, которая будет использоваться в вашей ситуации. Некоторые элементы, которые могут повлиять на ваш выбор:
Большинство структур типов xUnit обеспечивают некоторый базовый уровень функциональности, который может быть полезен. Я использовал Cunit с некоторым успехом в прошлом. (пакет libcunit1-dev для Ubuntu / Debian). Для большинства сред требуется наличие libc, для некоторых потребуется дополнительная поддержка ОС.
Другая альтернатива длиной всего 3 строки - это Minunit .
Я обнаружил, что модульное тестирование с использованием микроконтроллера в качестве цели довольно обременительно, поскольку вам необходимо представить среду, подходящую для загрузки тестов, их запуска и последующего получения результатов. Просто установить платформу, которая позволит вам сделать это, является большой задачей.
Другой подход, который я выбрал и который работал для меня, заключается в проведении модульного тестирования на хосте, реализующего уровень абстракции между драйверами и кодом приложения. Поскольку вы используете gcc для цели, код должен также компилироваться на хосте.
Тестирование на хосте компиляции, как правило, намного проще, так как у вас есть полная поддержка ОС хоста и всех ее инструментов. Например, при тестировании на хосте у меня есть поддельная версия моего беспроводного драйвера с тем же интерфейсом, что и у реального драйвера, который работает на цели. Версия хоста использует UDP-пакеты для имитации беспроводной передачи пакетов, а фиктивный драйвер поддерживает возможность отбрасывать пакеты, чтобы я мог проверить свои протоколы.
В продукте, над которым я работал, использовалась многопоточная ОС, поэтому уровень абстракции для тестирования на хост-ОС использовал вместо этого pthreads.
Хотя это и не идеально, чем проще для вас писать и запускать тесты, тем больше у вас шансов реализовать больше тестовых случаев. Еще одним преимуществом выполнения кода на разных платформах является проверка его переносимости. Вы быстро обнаружите ошибки порядка байтов, если архитектура получателя и хоста различаются.
Сейчас я немного не в теме, но чувствую, что эти идеи могут помочь с выбором платформы тестирования и методов тестирования.
источник
Проверьте embUnit http://embunit.sourceforge.net/embunit/index.html . Это встроенный модуль модульного тестирования C с низкой занимаемой площадью.
Мы успешно использовали его в нескольких проектах встроенных микроконтроллеров. Не ожидайте, что варианты и функции, которые вы получите с модулем тестирования настольных ПК. Но это определенно достаточно мощный.
Он имеет множество утверждений, определенных для вас, так что вам не нужно тратить время на написание пользовательских утверждений, как с minUnit.
источник
Некоторое время назад я написал подробное руководство по теме: модульное тестирование (встроенных) приложений на C с Ceedling ; Я использую эти методы в куче проектов, и я до сих пор доволен.
источник
Я просто смотрел на это сам. Я нашел статью из трех частей, в которой изложены основы модульного тестирования:
http://www.eetimes.com/design/embedded/4007177/Doing-C-code-unit-testing-on-a-shoestring-Part-1-The-basics-and-the-tools
Я также согласен со всем, что упомянул Остин.
источник
Попробуйте lint, но я не думаю, что это для модульного тестирования, это для анализа кода.
источник