Какую систему модульного тестирования я могу использовать для проекта mcu на основе переменного тока?

15

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

Сегодня я использую stm32 с OpenOCD-jtag с ПК с Linux, где все это управляется из классического Makefile и кросс-компилируется с помощью gcc.

Я мог бы создать что-то сам, но если бы была структура, которую я мог бы использовать, было бы неплохо. (Это бонус, если фреймворк может выводить результат в формате, который может прочитать Дженкинс / Хадсон).

Есть ли способ использовать инфраструктуру модульного тестирования с stm32?

Johan
источник
3
У меня нет времени , чтобы написать полный ответ, но я использовал много инструментов и методов , нашел в этих работах и этой серии блог . Одним словом: CMock!
Кевин Вермеер

Ответы:

4

Проверьте CppUTest, и отличный Джеймс Греннинг http://pragprog.com/book/jgade/test-driven-development-for-embedded-c

CppUTest поддерживает C и C ++, и у него есть хороший набор шаблонов Makefile, который довольно быстро начал меня.

blalor
источник
Купили версию ePub, давайте посмотрим, будет ли это хорошо :)
Johan
Книга хорошая, но я думаю, что единство (другая структура в этой книге) будет лучше соответствовать моим потребностям.
Йохан
Принято с тех пор, как книга подтолкнула меня в правильном направлении.
Йохан
5

Существует множество переменных, которые будут определять наилучшую среду для модульного тестирования, которая будет использоваться в вашей ситуации. Некоторые элементы, которые могут повлиять на ваш выбор:

  • Целевой язык.
  • Какая поддержка библиотеки доступна. например, libc или его урезанная версия.
  • Операционная система цели. например, None, FreeRTOS, пользовательский.

Большинство структур типов xUnit обеспечивают некоторый базовый уровень функциональности, который может быть полезен. Я использовал Cunit с некоторым успехом в прошлом. (пакет libcunit1-dev для Ubuntu / Debian). Для большинства сред требуется наличие libc, для некоторых потребуется дополнительная поддержка ОС.

Другая альтернатива длиной всего 3 строки - это Minunit .

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

Другой подход, который я выбрал и который работал для меня, заключается в проведении модульного тестирования на хосте, реализующего уровень абстракции между драйверами и кодом приложения. Поскольку вы используете gcc для цели, код должен также компилироваться на хосте.

Тестирование на хосте компиляции, как правило, намного проще, так как у вас есть полная поддержка ОС хоста и всех ее инструментов. Например, при тестировании на хосте у меня есть поддельная версия моего беспроводного драйвера с тем же интерфейсом, что и у реального драйвера, который работает на цели. Версия хоста использует UDP-пакеты для имитации беспроводной передачи пакетов, а фиктивный драйвер поддерживает возможность отбрасывать пакеты, чтобы я мог проверить свои протоколы.

В продукте, над которым я работал, использовалась многопоточная ОС, поэтому уровень абстракции для тестирования на хост-ОС использовал вместо этого pthreads.

Хотя это и не идеально, чем проще для вас писать и запускать тесты, тем больше у вас шансов реализовать больше тестовых случаев. Еще одним преимуществом выполнения кода на разных платформах является проверка его переносимости. Вы быстро обнаружите ошибки порядка байтов, если архитектура получателя и хоста различаются.

Сейчас я немного не в теме, но чувствую, что эти идеи могут помочь с выбором платформы тестирования и методов тестирования.

Остин Филлипс
источник
Я решил, как получить код для цели, и я могу использовать gdb в режиме сценария для остановки на другой точке останова, такой как test_ok или test_fail ( fun-tech.se/stm32/TestSuite/index.php ). Так что я на полпути. Это больше вопрос, как построить различные «тесты». Мои идеи сегодня немного негибки, поэтому я начал искать какие-то рамки.
Йохан
1

Проверьте embUnit http://embunit.sourceforge.net/embunit/index.html . Это встроенный модуль модульного тестирования C с низкой занимаемой площадью.

Мы успешно использовали его в нескольких проектах встроенных микроконтроллеров. Не ожидайте, что варианты и функции, которые вы получите с модулем тестирования настольных ПК. Но это определенно достаточно мощный.

Он имеет множество утверждений, определенных для вас, так что вам не нужно тратить время на написание пользовательских утверждений, как с minUnit.

sillevl
источник
1

Некоторое время назад я написал подробное руководство по теме: модульное тестирование (встроенных) приложений на C с Ceedling ; Я использую эти методы в куче проектов, и я до сих пор доволен.

Дмитрий Франк
источник
2
Это ответ только для ссылок, и, как таковой, он станет бесполезным, если URL-адрес изменится или ссылка не работает. Вы должны объяснить соответствующую информацию в ответе , затем вы можете добавить ссылку в качестве ссылки.
труба
2
@pipe Да, но вопрос (по существу, рекомендация к продукту) требует таких ответов.
Дмитрий Григорьев
-1

Попробуйте lint, но я не думаю, что это для модульного тестирования, это для анализа кода.

LEMUEL ADANE
источник
2
Статический анализ кода не может помочь выполнить и протестировать код, поэтому он не очень полезен.
Йохан
1
Возможно, не полезно в контексте модульного тестирования, но каждый должен использовать какой-то инструмент статического анализа.
Тим