【问题标题】:How to add application unit-tests in zephyr-rtos project如何在 zephyr-rtos 项目中添加应用程序单元测试
【发布时间】:2021-02-18 11:38:20
【问题描述】:

希望如何使用 Zephyr RTOS 启动新应用程序,包括应用程序源的单元测试。我已经看到 Zephyr 提供了一个测试框架 z-test 和一个测试运行器 sanitycheck。

我的目标是使用以下目录结构将生产代码与测试代码分开:

PROJECT_ROOT
|-src
|-test

src 文件夹应包含应用程序源。 test 文件夹应包含应用程序源的单元测试,可能包含多个单独的二进制文件。

如何使用 Zephyr 提供的框架(west、sanitycheck)来实现这一点?测试应用程序如何知道在哪里寻找应用程序源?

【问题讨论】:

    标签: zephyr-rtos


    【解决方案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?highlight=test

    此外。如果你想使用测试运行器。他们将名称从“sanitycheck”更改为“twister”(Zephyr 版本 2.5)。您可以在同一个脚本文件夹中找到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 2011-06-13
      • 2011-12-07
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多