zephyr-rtos - 如何在 zephyr-rtos 项目中添加应用程序单元测试
问题描述
想如何使用 Zephyr RTOS 启动一个新应用程序,包括应用程序源的单元测试。我已经看到 Zephyr 提供了一个测试框架 z-test 和一个测试运行器 sanitycheck。
我的目标是使用以下目录结构将生产代码与测试代码分开:
PROJECT_ROOT
|-src
|-test
该src
文件夹应包含应用程序源。该test
文件夹应包含应用程序源的单元测试,可能包含多个单独的二进制文件。
如何使用 Zephyr 提供的框架(west、sanitycheck)来实现这一点?测试应用程序如何知道在哪里寻找应用程序源?
解决方案
也许这不是正确的方法,但我解决了如下:
- 像你一样创建一个目录结构:
PROJECT_ROOT
|-src
|-test
- 将带有测试代码的源文件添加到 test/ 目录。
主.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?highlight=test
除了。如果你想使用测试运行器。他们将名称从“sanitycheck”更改为“twister”(Zephyr 版本 2.5)。您可以在同一个脚本文件夹中找到它。
推荐阅读
- python - 读取超时 Firebase
- r - 我不断收到错误“...”不是图形参数?
- css - 如何覆盖单个对话框窗口的 css 类的属性
- java - 如何使用 Spring Boot 为 ObjectOptimisticLockingFailureException 获取 409?
- android - 获取访问被拒绝查找属性“vendor.camera.aux.packagelist”错误取消手电筒
- python - 没有 Scrapy 控制台输出,但 print() 显示在控制台中
- python-3.x - 如何检索 USB 转串口地址?
- mongodb - 替换操作:它的写入阶段相对于它的过滤阶段是原子的吗?
- google-colaboratory - 使用 Colab 时如何检查 gpu 的状态?
- javascript - Webpacker 4.2.2 到 5.1.1:不再查找 Element UI 中使用的元素图标