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