Unity测试入门(基于ESP-IDF)

主要参考资料:

ESP32 中的单元测试: https://docs.espressif.com/projects/esp-idf/zh_CN/stable/esp32/api-guides/unit-tests.html#id5

Throw The Switch团队的unity介绍: https://www.throwtheswitch.org/unity

一个简单好用的C语言单元测试框架-Unity: https://blog.csdn.net/qq_53221728/article/details/135676381

目录

简介

ESP-IDF 提供以下方法测试软件。

  • 一种是基于目标的测试,该测试使用运行在 esp32 上的中央单元测试应用程序。这些测试使用的是基于 Unity的单元测试框架。通过把测试用例放在组件的 test 子目录,可以将其集成到 ESP-IDF 组件中。本文档主要介绍这种基于目标的测试方法。
  • 另一种是基于 Linux 主机的单元测试,其中所有硬件行为都通过 Mock 组件进行模拟。此测试方法目前仍在开发中,暂且只有一小部分ESP-IDF 组件支持 Mock,具体请参考 基于 Linux 主机的单元测试。

Unity是一个用于C语言的轻量级单元测试框架。它由Throw The Switch团队开发,旨在简化嵌入式系统的单元测试。单元测试中单元的含义,单元就是人为规定的最小的被测功能模块,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。在实际项目中,单元测试往往由开发人员完成。

ESP-IDF单元测试学习

编译单元测试程序

切换到 tools/unit-test-app 目录下进行配置和编译,unit-test-app 是一个IDF示例工程项目。

  • idf.py menuconfig - 配置单元测试程序。
  • idf.py -T all build - 编译单元测试程序,测试每个组件 test 子目录下的用例。
  • idf.py -T "xxx yyy" build - 编译单元测试程序,对以空格分隔的特定组件进行测试(如 idf.py -T heap build - 仅对 heap 组件目录下的单元测试程序进行编译)。
  • idf.py -T all -E "xxx yyy" build - 编译单元测试程序,测试除指定组件之外的所有组件(例如 idf.py
    -T all -E "ulp mbedtls" build - 编译所有的单元测试,不包括 ulp 和 mbedtls 组件。)。
  • idf.py flash - 烧写所有编译输出的文件。

由于 Windows 命令提示符固有限制,需使用以下语法来编译多个组件的单元测试程序:idf.py -T xxx -T yyy build 或者在 PowerShell 中使用 idf.py -T `"xxx yyy`" build,在 Windows 命令提示符中使用 idf.py -T ^"ssd1306 hts221^" build。

运行单元测试

cpp 复制代码
Here is the test menu, pick your combo:
(1)     "esp_ota_begin() verifies arguments" [ota]
(2)     "esp_ota_get_next_update_partition logic" [ota]
(3)     "Verify bootloader image in flash" [bootloader_support]
(4)     "Verify unit test app image" [bootloader_support]
(5)     "can use new and delete" [cxx]
(6)     "can call virtual functions" [cxx]
(7)     "can use static initializers for non-POD types" [cxx]
(8)     "can use std::vector" [cxx]
(9)     "static initialization guards work as expected" [cxx]
(10)    "global initializers run in the correct order" [cxx]
(11)    "before scheduler has started, static initializers work correctly" [cxx]
(12)    "adc2 work with wifi" [adc]
(13)    "gpio master/slave test example" [ignore][misc][test_env=UT_T2_1][multi_device]
        (1)     "gpio_master_test"
        (2)     "gpio_slave_test"
(14)    "SPI Master clockdiv calculation routines" [spi]
(15)    "SPI Master test" [spi][ignore]
(16)    "SPI Master test, interaction of multiple devs" [spi][ignore]
(17)    "SPI Master no response when switch from host1 (SPI2) to host2 (SPI3)" [spi]
(18)    "SPI Master DMA test, TX and RX in different regions" [spi]
(19)    "SPI Master DMA test: length, start, not aligned" [spi]
(20)    "reset reason check for deepsleep" [esp32][test_env=UT_T2_1][multi_stage]
        (1)     "trigger_deepsleep"
        (2)     "check_deepsleep_reset_reason"

常规测试用例会打印用例名字和描述,主从测试用例还会打印子菜单(已注册的测试函数的名字)。

可以输入以下任意一项来运行测试用例:

  • 引号中写入测试用例的名字,运行单个测试用例。
  • 测试用例的序号,运行单个测试用例。
  • 方括号中的模块名字,运行指定模块所有的测试用例。
  • 星号,运行所有测试用例。

multi_device\] 和 \[multi_stage\]`标签告诉测试运行者该用例是多设备测试还是多阶段测试。这些标签由 `TEST_CASE_MULTIPLE_STAGES 和 TEST_CASE_MULTIPLE_DEVICES 宏自动生成。

相关推荐
秀秀更健康1 小时前
STM32的程序下载不进去----VDDA悬空
stm32·单片机·嵌入式硬件
长安第一美人2 小时前
AI辅助下的嵌入式UI系统设计与实践(二)[代码阅读理解]
c++·嵌入式硬件·ui·显示屏·工业应用
学嵌入式的小杨同学4 小时前
STM32 进阶封神之路(二十五):ESP8266 深度解析 —— 从 WiFi 通信原理到 AT 指令开发(底层逻辑 + 实战基础)
c++·vscode·stm32·单片机·嵌入式硬件·mcu·智能硬件
树爷只认钱4 小时前
ESP01S模块+串口底座 AT指令连接中移Onenet物联网全过程(第1篇)
单片机·嵌入式硬件·物联网·esp8266
学嵌入式的小杨同学4 小时前
STM32 进阶封神之路(二十六):ESP8266 实战全攻略 ——TCP 通信 + 数据上传 + 远程控制 + 透传模式(库函数 + 代码落地)
stm32·单片机·嵌入式硬件·mcu·硬件架构·硬件工程·智能硬件
我不是程序猿儿5 小时前
【嵌入式】适合 STM32 初学者BootLoader 入门学习心得
linux·stm32·单片机·嵌入式硬件·学习
惶了个恐5 小时前
嵌入式硬件第五弹——ARM(1)
嵌入式硬件
Suifqwu6 小时前
stm32进阶-启动文件
stm32·单片机·嵌入式硬件
火龙果里的芝麻7 小时前
STM32 FreeModbus 移植(最详细)
stm32·单片机·嵌入式硬件
weiyvyy7 小时前
嵌入式硬件接口开发的流程
人工智能·驱动开发·单片机·嵌入式硬件·硬件架构·硬件工程