使用 Unity 进行 ESP-IDF 单元测试

当您使用 ESP-IDF 开发应用程序并考虑为组件函数添加单元测试时,此扩展可以帮助基于 Unity 在您的设备上发现和执行测试,如 ESP32 单元测试 文档中所述。

扩展会在当前项目工作区文件夹中探索遵循前述文档约定的测试,即所有遵循 idf.unitTestFilePattern 配置设置中指定的 glob 模式(默认:**/test/test_*.c)的测试文件。测试用例通过 TEST_CASE\\(\"(.*)\",\\s*\"(.*)\"\\) 正则表达式进行解析,匹配以下测试文件格式:

TEST_CASE("test name", "[module name]")
{
        // Add test here
}

配置 ESP-IDF 项目以在扩展中启用单元测试

假设您有一个具有以下结构的 ESP-IDF 项目:

unit_test
  - components                              - 应用程序项目的组件
    - testable
      - include
      - test                                - 组件的测试目录
        * component.mk / CMakeLists.txt     - 测试的组件 makefile
        * test_mean.c                       - 测试源文件
      * component.mk / CMakeLists.txt       - 组件 makefile
      * mean.c                              - 组件源文件

testable 组件内,单元测试添加到 test 目录中。test 目录包含测试的源文件和组件 makefile(component.mk / CMakeLists.txt)。

如果您想为 testable 组件添加测试,只需定义一个 test 子目录并添加包含不同测试用例的 test_name.c 文件即可运行。

这是来自 ESP-IDF unit_test 示例 的结构,可以作为参考。

备注

您可以通过修改 VS Code 设置中的 idf.unitTestFilePattern 设置来自定义测试文件发现模式。这允许您为测试文件使用不同的命名约定或目录结构。

PyTest 嵌入式服务配置

扩展使用 pytest-embedded 在 ESP-IDF 设备上运行测试。idf.pyTestEmbeddedServices 配置设置允许您指定运行 pytest 命令时要使用的嵌入式服务。

默认情况下,扩展使用 ["esp", "idf"] 作为嵌入式服务。这些服务提供以下功能:

  • esp:启用乐鑫特定功能,包括使用 esptool 进行自动目标检测和端口确认

  • idf:提供 ESP-IDF 项目支持,包括自动烧录构建的二进制文件和解析二进制信息

您可以通过修改 VS Code 设置中的 idf.pyTestEmbeddedServices 设置来自定义嵌入式服务。例如,您可能想要添加其他服务,如:

  • serial:用于基本串口通信

  • jtag:用于 OpenOCD/GDB 工具

  • qemu:用于在 QEMU 而不是真实硬件上运行测试

  • wokwi:用于在 Wokwi 仿真平台上运行测试

有关可用服务及其功能的完整列表,请参阅 pytest-embedded 服务文档

备注

您选择的嵌入式服务将影响执行的 pytest 命令。确保您指定的服务与您的测试环境和要求兼容。

运行测试

当您点击 Visual Studio Code 活动栏 中的测试选项卡时,扩展将尝试查找所有测试文件和测试用例,并保存测试组件列表以便在步骤 3 中添加。

备注

用户需要通过选择菜单 查看 > 命令面板 并输入 ESP-IDF 单元测试:安装 ESP-IDF PyTest 要求 来安装 ESP-IDF PyTest python 要求。选择命令并查看 pytest 包安装输出。

当按下测试上的运行按钮时,它将在测试前按如下方式配置当前项目:

  1. 检查 ESP-IDF 的 PyTest 要求是否满足。

备注

此扩展中的单元测试需要在您的 Python 虚拟环境中安装 ESP-IDF PyTest 要求

  1. 如果在 settings.json 中 idf.toolsPath 配置设置指定的 python 当前虚拟环境中未找到,则安装 ESP-IDF PyTest 要求。

  2. 从扩展模板复制 unity-app 并将测试组件添加到主 CMakeLists.txt 的 TEST_COMPONENTS cmake 变量中。扩展 unity-app 是一个基本的 ESP-IDF 应用程序,带有 unity 菜单,将在当前 idf.port 串行设备上构建和烧录,包含在探索步骤中找到的所有测试用例。

备注

您也可以使用 ESP-IDF 单元测试:安装 ESP-IDF PyTest 要求 扩展命令创建、构建和烧录 unity 测试应用程序,该命令将复制构建并烧录生成的单元测试应用程序到您的设备。

  1. 运行 pytest-embedded,这是一个扩展 PyTest 以在 esp-idf 设备上运行的插件,并在 unity-app 目录中以 XML 文件形式输出结果。这作为扩展任务执行,输出显示在终端中(类似于构建和烧录任务)。pytest 命令使用 idf.pyTestEmbeddedServices 配置设置中指定的嵌入式服务(默认:["esp", "idf"])。

备注

您可以通过修改 VS Code 设置中的 idf.pyTestEmbeddedServices 设置来自定义 pytest 使用的嵌入式服务。这允许您指定不同的服务或根据需要为测试环境添加其他服务。

  1. 解析 XML 结果文件,并在测试选项卡中更新测试结果,显示测试持续时间。

  2. 您可以使用测试选项卡中的 刷新测试 按钮刷新测试并再次构建 unity-app。