Как добавить модульные тесты приложения в проект zephyr-rtos

#zephyr-rtos

#zephyr-rtos

Вопрос:

Как бы хотелось запустить новое приложение с использованием Zephyr RTOS, включая модульные тесты для исходных текстов приложений. Я видел, что Zephyr предоставляет z-тестовый фреймворк и тестовую проверку работоспособности.

Моя цель — отделить производственный код от кода тестирования, используя следующую структуру каталогов:

 PROJECT_ROOT
|-src
|-test
  

src Папка должна содержать исходные тексты приложения. test Папка должна содержать модульные тесты для исходных текстов приложений, возможно, с несколькими отдельными двоичными файлами.

Как я могу добиться этого с помощью фреймворка (west, sanitycheck), предоставленного Zephyr? Как тестовое приложение узнает, где искать источники приложения?

Ответ №1:

Возможно, это неправильный способ сделать это, но я решил это следующим образом:

  1. Создайте структуру каталогов, как вы это делали:
 PROJECT_ROOT
|-src
|-test
  
  1. Добавьте исходный файл с тестовым кодом в каталог 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);
}
  
  1. При тестировании добавьте следующую строку в prj.conf:
 CONFIG_ZTEST=y
  
  1. Создайте свой 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)

...
  
  1. Создайте свой код.
  2. Подключите устройство и посмотрите результат теста на терминале. Например, с помощью minicom:
 $ minicom -b 115200 -D /dev/ttyACM0
  

Документацию о тестировании Zephyr вы найдете здесь:
https://docs.zephyrproject.org/latest/guides/test/index.html ?выделить = тест

Кроме того. Если вы хотите использовать тестовый бегун. Они изменили название с «sanitycheck» на «twister» (версия Zephyr 2.5). Вы найдете его в той же папке scripts.