Який модульний тестовий фреймворк можна використовувати для проекту, що базується на змінного струму?


15

Я думаю про те, як я можу використовувати модульні тести у своєму проекті mcu та які рамки я можу використовувати для його спрощення.

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

Я міг би щось створити сам, але якщо є рамки, якими я можу скористатись, було б непогано. (Це бонус, якщо рамки можуть вивести результат у форматі, який зможе прочитати Дженкінс / Хадсон).

Чи є спосіб використання одиничного тестового каркасу з stm32?


3
Я не встигаю написати повну відповідь, але я використав чимало інструментів і прийомів, знайдених у цих роботах та цій серії блогу . Одним словом: CMock!
Кевін Вермер

Відповіді:


4

Ознайомтеся з CppUTest, і Джеймс Грінінг прекрасний http://pragprog.com/book/jgade/test-driven-development-for-embedded-c

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


Купив версію ePub, подивимось, чи корисна вона :)
Йохан

Книга гарна, але я думаю, що єдність (інша рамка в цій книзі) краще відповідатиме моїй потребі.
Johan

Прийнято, оскільки книга підштовхнула мене в правильному напрямку.
Йоган

5

Існує маса змінних, які визначатимуть найкращі рамки тестування одиниць, які слід використовувати у вашій ситуації. Деякі елементи, які можуть вплинути на ваш вибір, будуть:

  • Мова цілі.
  • Яка підтримка бібліотеки доступна. наприклад, libc або його скорочена версія.
  • Операційна система цілі. наприклад None, FreeRTOS, користувацькі.

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

Ще одним альтермативом, який триває лише 3 рядки, є Minunit .

Я виявив, що тестування приладів за допомогою мікроконтролера як цілі є досить громіздким, оскільки вам потрібно мати можливість представити середовище, придатне для завантаження тестів, запуск їх, а потім отримання результатів. Просто встановити платформу на місці, яка дозволить вам це зробити - це велике завдання.

Ще один підхід, який я працював для мене, - це тестування блоку на хості, реалізація рівня абстракції між драйверами та кодом програми. Оскільки ви використовуєте gcc для цілі, код також повинен збиратися на хості.

Тестування на хості компіляції, як правило, набагато простіше, оскільки ви маєте повну підтримку хост-операційної системи та всіх її інструментів. Наприклад, під час тестування на хості у мене є глузуюча версія мого бездротового драйвера з тим же інтерфейсом, що і реальний драйвер, який працює на цілі. Хост-версія використовує пакети UDP для імітації бездротової передачі пакетів, макет драйвера підтримує можливість скидання пакетів, щоб я міг перевірити свої протоколи.

У продукті, над яким я працював, використовувалася потокова ОС, тому шар абстракції для тестування на хост-OS використовував замість цього pthreads.

Хоча це не ідеально, чим простіше вам писати та запускати тести, тим більше шансів на те, що ви впровадите більше тестових випадків. Ще однією перевагою запуску коду на різних платформах є перевірка наявності портативного коду. Ви швидко виберете ендіанічні помилки, якщо цільова та хост-архітектура відрізняються.

Я зараз трохи не в темі, але, думаю, ці ідеї можуть допомогти у виборі рамки тестування та методів тестування.


Я вирішив, як я отримую код на цілі, і я можу використовувати gdb в режимі сценарію, щоб зупинитися на різних точках розриву, таких як test_ok або test_fail ( fun-tech.se/stm32/TestSuite/index.php ). Так що я на півдорозі. Це більше питання, як будувати різні "тести". Мої ідеї сьогодні трохи негнучкі, тому я почав шукати якісь рамки.
Йоган

1

Перевірте embUnit http://embunit.sourceforge.net/embunit/index.html . Це вбудована тестова рамка модуля С із низьким рівнем сліду.

Ми успішно використовували його в парі вбудованих мікроконтролерів. Не чекайте варіантів та функцій, які ви отримуєте з тестовою рамкою настільного блоку. Але це, безумовно, досить потужне.

У ньому визначено багато тверджень, визначених для вас, тому вам не доведеться втрачати багато часу на написання користувацьких тверджень, таких як minUnit.


1

Деякий час тому я написав ґрунтовний підручник на тему: Тестування одиниць (вбудованих) програм C на Ceedling ; Я використовую ці прийоми у купі проектів, і я до цього часу досить задоволений.


2
Це відповідь, що стосується лише посилання, і як така стане нікчемною, якщо зміна URL-адреси або посилання знизиться. Ви повинні пояснити відповідну інформацію у відповіді , тоді ви можете додати посилання як орієнтир.
труба

2
@pipe Так, але на запитання (по суті рекомендація щодо продукту) напрошується відповіді, як цей.
Дмитро Григор’єв


-2

Спробуйте lint, але я не думаю, що це для тестування одиниць, а для аналізу коду.


2
Статичний аналіз коду не може допомогти виконувати та протестувати код, тому листінг не дуже корисний.
Йоган

1
Можливо, це не корисно в контексті тестування одиниць, але кожен повинен використовувати якийсь інструмент статичного аналізу.
Тім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.