c++ - 如何在不刷新的情况下运行 ESP32 的单元测试?

标签 c++ unit-testing arduino esp32 platformio

从其他语言和平台得知,我们希望在代码刷新到硬件之前的构建过程中使用单元测试。对于不需要 ESP32 硬件的简单功能测试来说,这应该是可能的。

但据我们了解,C++ 代码是为 ESP32 芯片编译(和链接)的,不应在开发系统或 CI/CD 管道中运行。

有没有办法在另一个系统上模拟 ESP32(用于 C++)或以任何其他方式运行单元测试?


注意:我们使用“platformio”进行构建。

最佳答案

可以使用qemu_esp32来做到这一点模拟器。您可以编译测试运行程序并直接在模拟器上运行它,而不是将其刷新到真正的 esp32 芯片。

以下是如何执行此操作的示例(改编自 esp32_qemu_unity_test_action ):

  1. 像平常一样编译测试运行程序。在继续之前,您可能想要实际刷新它,只是为了知道您的测试运行器和测试正在工作。
idf.py build
cd build 
  • 通常,当您刷新 esp32 时,您会将多个二进制文件写入特定位置。此命令将所有这些合并到一个完整的二进制图像中。
  • esptool.py --chip esp32 merge_bin --fill-flash-size 4MB -o flash_image.bin @flash_args
    
  • 运行 esp32 模拟器并提供完整的二进制 Flash 镜像。
  • /opt/qemu/bin/qemu-system-xtensa -nographic -no-reboot -machine esp32 -drive file=flash_image.bin,if=mtd,format=raw -serial file:output.log
    

    通过指定-no-reboot,模拟器将直接退出而不是重新启动。

    关于c++ - 如何在不刷新的情况下运行 ESP32 的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58710050/

    相关文章:

    serial-port - 从 Arduino 发送到 Processing 的奇怪随机数据

    c++ - 静态或堆栈分配数组的可变大小元素是否驻留在堆空间中?

    java - Spring/JUnit - 运行并非真正的单元测试 "tests"

    unit-testing - 为什么在 Nunit 中 TestFixtureSetUp 之前执行 TestCaseSource

    arduino - 如何将 i2c 连接到 arduino uno 上的 20x4 LCD 显示器上的背光调暗

    c - 如何在 Arduino 中解析 JSON 数据

    c++ - 类型转换一个物体两次 vs 一次性能

    c++ - 如何选择编译应用程序的 Visual C++ 库版本?

    c++ - 如何读取 C++ 中 system() 调用的结果?

    java - 使用 Mockito 测试父类(super class)方法