
Программируешь микроконтроллеры? Начитался про TDD или просто устал искать баги и переписывать код заново?
Друг, попробуй тесты.
В данной статье будет показано как интегрировать Ceedling в Eclipse/SW4STM32, чтобы при каждой сборке код проходил через тесты.
Что меня натолкнуло на написание статьи?
Я не смог найти подробной инструкции, а по найденным инструкциям сделать не получалось, ввиду их поверхностного или устаревшего содержаний (например запуск ceedling'a больше не осуществляется командой rake).
Инструкция по интеграции ceedling'a в eclipse от разработчиков весьма скудная а единственная найденная инструкция оказалась платной (это стало последней каплей):

Инструкция по интеграции ceedling'a в eclipse от разработчиков весьма скудная а единственная найденная инструкция оказалась платной (это стало последней каплей):

Установка
На примере OS Windows, CubeMX и SW4STM32.
Устанавливаем Chocolatey
Открываем PowerShell.exe и выполняем:

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

Устанавливаем MinGW
Открываем PowerShell.exe и выполняем:
choco install mingw
Устанавливаем ruby
Открываем PowerShell.exe и выполняем:
choco install ruby
Устанавливаем gem ceedling
Перезапускаем PowerShell!
Открываем PowerShell.exe и выполняем:
Открываем PowerShell.exe и выполняем:
gem install ceedling
Проверка работоспособности
Открываем PowerShell.exe и выполняем:

cd /
ceedling new test_ceedling
cd test_ceedling
ceedling test:all

Создание проекта
Создадим проект с помощью CubeMX
Создаём проект в CubeMX под toolchain/ide SW4STM32.
Запуск CubeMX производить от имени администратора для создания проекта в директории диска С:/
Application structere -> advanced (иначе сходу не собирается проект).

Запуск CubeMX производить от имени администратора для создания проекта в директории диска С:/
Application structere -> advanced (иначе сходу не собирается проект).

Инициализируем ceedling в проект:
cd /
ceedling new test_ceedling
Создадим в проекте следующие структуру и c./h. файлы, добавим пути в project.yml:

Добавим source location & includes



Создадим новый Builder:

Arguments -> test:all

Запуск
Создадим ещё одно окно консоли для тестов:

Переключим его на отображение результатов Ceedling builder'a:

Нажимаем ctrl+B и видим результаты тестов в консоли:

Добавим периферию
Зачастую результат выполнения функции зависит от внешних составляющих.
Помимо инструмента для генерации тестов — Unity утилита Ceedling поддерживает CMock — генератор mock-объектов и заглушек.
Представим, что наш калькулятор при вычислении разницы,
a - b
если кнопка нажата, считает её иначе.
b - a
То в этом случае наши тесты могут выглядеть следующим образом:

Функция проверки нажатия кнопки была объявлена, но не реализована(не написана).
Нажимаем ctrl+B и видим результаты тестов в консоли:

В данном случае мы создали имитацию кнопки, на месте которой может быть UART, SPI, I2C и пр.
Заключение
Теперь при каждой сборке приложения справа в уголке можно будет наблюдать результат выполненных тестов:
