#zephyr-rtos
#zephyr-rtos
Вопрос:
Как бы хотелось запустить новое приложение с использованием Zephyr RTOS, включая модульные тесты для исходных текстов приложений. Я видел, что Zephyr предоставляет z-тестовый фреймворк и тестовую проверку работоспособности.
Моя цель — отделить производственный код от кода тестирования, используя следующую структуру каталогов:
PROJECT_ROOT
|-src
|-test
src
Папка должна содержать исходные тексты приложения. test
Папка должна содержать модульные тесты для исходных текстов приложений, возможно, с несколькими отдельными двоичными файлами.
Как я могу добиться этого с помощью фреймворка (west, sanitycheck), предоставленного Zephyr? Как тестовое приложение узнает, где искать источники приложения?
Ответ №1:
Возможно, это неправильный способ сделать это, но я решил это следующим образом:
- Создайте структуру каталогов, как вы это делали:
PROJECT_ROOT
|-src
|-test
- Добавьте исходный файл с тестовым кодом в каталог test/ .
main.cpp:
#include <ztest.h>
/* Make private functions public for access.
I think this is not a clean way to do it, but for my purposes it was just fine. */
#define private public
#include "../src/Classyouwanttest.h"
void test_function(void)
{
Classyouwanttest classyouwanttest;
/* your zassert instructions here: */
zassert_equal(classyouwanttest.funcXY(...) , ..., ...);
}
void test_main(void)
{
ztest_test_suite(common,
ztest_unit_test(test_function)
);
ztest_run_test_suite(common);
}
- При тестировании добавьте следующую строку в prj.conf:
CONFIG_ZTEST=y
- Создайте свой CMakeLists.txt возможность переключения между производственным и тестовым кодом:
...
option(TESTS "Run tests in test/" ON)
# option(TESTS "Run tests in test/" OFF)
if(TESTS)
target_sources(app PRIVATE test/main.cpp)
# add here all class files for productive code
target_sources(app PRIVATE ...
else()
target_sources(app PRIVATE src/main.cpp)
# add here all class files for productive code
target_sources(app PRIVATE ...
endif()
unset(TESTS CACHE)
...
- Создайте свой код.
- Подключите устройство и посмотрите результат теста на терминале. Например, с помощью minicom:
$ minicom -b 115200 -D /dev/ttyACM0
Документацию о тестировании Zephyr вы найдете здесь:
https://docs.zephyrproject.org/latest/guides/test/index.html ?выделить = тест
Кроме того. Если вы хотите использовать тестовый бегун. Они изменили название с «sanitycheck» на «twister» (версия Zephyr 2.5). Вы найдете его в той же папке scripts.