![image](https://habrastorage.org/getpro/habr/post_images/483/de9/0b1/483de90b1b021d436a3555e27ef12c6b.jpg)
Программируешь микроконтроллеры? Начитался про TDD или просто устал искать баги и переписывать код заново?
Друг, попробуй тесты.
В данной статье будет показано как интегрировать Ceedling в Eclipse/SW4STM32, чтобы при каждой сборке код проходил через тесты.
Что меня натолкнуло на написание статьи?
Я не смог найти подробной инструкции, а по найденным инструкциям сделать не получалось, ввиду их поверхностного или устаревшего содержаний (например запуск ceedling'a больше не осуществляется командой rake).
Инструкция по интеграции ceedling'a в eclipse от разработчиков весьма скудная а единственная найденная инструкция оказалась платной (это стало последней каплей):
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/38f/ae2/4e7/38fae24e7fa5e2fa191378d0b3ede252.png)
Инструкция по интеграции ceedling'a в eclipse от разработчиков весьма скудная а единственная найденная инструкция оказалась платной (это стало последней каплей):
![image](https://habrastorage.org/getpro/habr/post_images/38f/ae2/4e7/38fae24e7fa5e2fa191378d0b3ede252.png)
Установка
На примере OS Windows, CubeMX и SW4STM32.
Устанавливаем Chocolatey
Открываем PowerShell.exe и выполняем:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/2d9/a0a/714/2d9a0a714190684746546df1e98dcc28.png)
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
![image](https://habrastorage.org/getpro/habr/post_images/2d9/a0a/714/2d9a0a714190684746546df1e98dcc28.png)
Устанавливаем MinGW
Открываем PowerShell.exe и выполняем:
choco install mingw
Устанавливаем ruby
Открываем PowerShell.exe и выполняем:
choco install ruby
Устанавливаем gem ceedling
Перезапускаем PowerShell!
Открываем PowerShell.exe и выполняем:
Открываем PowerShell.exe и выполняем:
gem install ceedling
Проверка работоспособности
Открываем PowerShell.exe и выполняем:
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/bc7/37a/bdf/bc737abdf92848ce20bf84cbb06d6936.png)
cd /
ceedling new test_ceedling
cd test_ceedling
ceedling test:all
![image](https://habrastorage.org/getpro/habr/post_images/bc7/37a/bdf/bc737abdf92848ce20bf84cbb06d6936.png)
Создание проекта
Создадим проект с помощью CubeMX
Создаём проект в CubeMX под toolchain/ide SW4STM32.
Запуск CubeMX производить от имени администратора для создания проекта в директории диска С:/
Application structere -> advanced (иначе сходу не собирается проект).
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/206/183/ca7/206183ca7858277136ff1b13910251ce.png)
Запуск CubeMX производить от имени администратора для создания проекта в директории диска С:/
Application structere -> advanced (иначе сходу не собирается проект).
![image](https://habrastorage.org/getpro/habr/post_images/206/183/ca7/206183ca7858277136ff1b13910251ce.png)
Инициализируем ceedling в проект:
cd /
ceedling new test_ceedling
Создадим в проекте следующие структуру и c./h. файлы, добавим пути в project.yml:
![image](https://habrastorage.org/getpro/habr/post_images/5a7/f9a/5c6/5a7f9a5c657adbf0f0b756a5018f080d.png)
Добавим source location & includes![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/93e/7b5/2d1/93e7b52d19642eb92cdbbae3e0417adb.png)
![image](https://habrastorage.org/r/w1560/getpro/habr/post_images/be0/a4e/a87/be0a4ea87af339176b9aaddc8d1fce53.png)
![image](https://habrastorage.org/getpro/habr/post_images/93e/7b5/2d1/93e7b52d19642eb92cdbbae3e0417adb.png)
![image](https://habrastorage.org/getpro/habr/post_images/be0/a4e/a87/be0a4ea87af339176b9aaddc8d1fce53.png)
Создадим новый Builder:
![image](https://habrastorage.org/getpro/habr/post_images/36b/3f6/f5a/36b3f6f5a9b5df8e970abb86e183f0a9.png)
Arguments -> test:all
![image](https://habrastorage.org/getpro/habr/post_images/02d/135/5a8/02d1355a8b606cf8dd1502aefd97f9cb.png)
Запуск
Создадим ещё одно окно консоли для тестов:
![image](https://habrastorage.org/getpro/habr/post_images/0e7/d42/e0f/0e7d42e0fa00e25cf9d4708685ed5372.png)
Переключим его на отображение результатов Ceedling builder'a:
![image](https://habrastorage.org/getpro/habr/post_images/e3f/2bb/361/e3f2bb3614232eae7eac65b86dfbb3b7.png)
Нажимаем ctrl+B и видим результаты тестов в консоли:
![image](https://habrastorage.org/getpro/habr/post_images/10b/d86/1c8/10bd861c83d4d6ee127589d100f5be2a.png)
Добавим периферию
Зачастую результат выполнения функции зависит от внешних составляющих.
Помимо инструмента для генерации тестов — Unity утилита Ceedling поддерживает CMock — генератор mock-объектов и заглушек.
Представим, что наш калькулятор при вычислении разницы,
a - b
если кнопка нажата, считает её иначе.
b - a
То в этом случае наши тесты могут выглядеть следующим образом:
![image](https://habrastorage.org/getpro/habr/post_images/98c/d67/672/98cd67672150e275ad1a993485a108fe.png)
Функция проверки нажатия кнопки была объявлена, но не реализована(не написана).
Нажимаем ctrl+B и видим результаты тестов в консоли:
![image](https://habrastorage.org/getpro/habr/post_images/83d/efd/cbf/83defdcbf481bc83699ab7713beecd1b.png)
В данном случае мы создали имитацию кнопки, на месте которой может быть UART, SPI, I2C и пр.
Заключение
Теперь при каждой сборке приложения справа в уголке можно будет наблюдать результат выполненных тестов:
![image](https://habrastorage.org/getpro/habr/post_images/40e/696/f14/40e696f14e970bcfae259f5c995e224d.png)