Pull to refresh

Ceedling + Eclipse или unit-тесты для микроконтроллеров

Reading time 2 min
Views 9.6K
image


Программируешь микроконтроллеры? Начитался про TDD или просто устал искать баги и переписывать код заново?

Друг, попробуй тесты.

В данной статье будет показано как интегрировать Ceedling в Eclipse/SW4STM32, чтобы при каждой сборке код проходил через тесты.

Что меня натолкнуло на написание статьи?
Я не смог найти подробной инструкции, а по найденным инструкциям сделать не получалось, ввиду их поверхностного или устаревшего содержаний (например запуск ceedling'a больше не осуществляется командой rake).

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

Установка


На примере 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'))

image

Устанавливаем MinGW
Открываем PowerShell.exe и выполняем:
choco install mingw


Устанавливаем ruby
Открываем PowerShell.exe и выполняем:
choco install ruby


Устанавливаем gem ceedling
Перезапускаем PowerShell!

Открываем PowerShell.exe и выполняем:
gem install ceedling


Проверка работоспособности
Открываем PowerShell.exe и выполняем:

cd /

ceedling new test_ceedling

cd test_ceedling

ceedling test:all

image

Создание проекта


Создадим проект с помощью CubeMX
Создаём проект в CubeMX под toolchain/ide SW4STM32.

Запуск CubeMX производить от имени администратора для создания проекта в директории диска С:/

Application structere -> advanced (иначе сходу не собирается проект).

image

Инициализируем ceedling в проект:

cd /

ceedling new test_ceedling

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

image

Добавим source location & includes
image

image

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

image

Arguments -> test:all

image

Запуск


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

image

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

image

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

image

Добавим периферию


Зачастую результат выполнения функции зависит от внешних составляющих.

Помимо инструмента для генерации тестов — Unity утилита Ceedling поддерживает CMock — генератор mock-объектов и заглушек.

Представим, что наш калькулятор при вычислении разницы,

a - b

если кнопка нажата, считает её иначе.

b - a

То в этом случае наши тесты могут выглядеть следующим образом:

image

Функция проверки нажатия кнопки была объявлена, но не реализована(не написана).

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

image

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

Заключение


Теперь при каждой сборке приложения справа в уголке можно будет наблюдать результат выполненных тестов:

image
Tags:
Hubs:
+15
Comments 8
Comments Comments 8

Articles