You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个Ceedling单元测试中验证多硬件版本驱动并合并覆盖率?

多硬件版本驱动的Ceedling单元测试与覆盖率合并方案

针对你的需求,完全可以在单个Ceedling项目中完成两个硬件版本的测试验证,并且合并覆盖率结果得到全代码库的单一报告,具体方案如下:

一、单个项目内实现多版本测试验证

Ceedling支持通过多环境编译配置,在同一个项目中针对不同硬件版本生成测试代码并执行,无需维护两个独立项目:

  1. 修改项目配置文件project.yml
    添加多组编译定义和测试环境,同时开启覆盖率统计:
# 定义不同硬件版本的编译宏
:defines:
  :common: []
  :hw_version_1:
    - HW_VERSION_1
  :hw_version_2:
    - HW_VERSION_2

# 配置多测试环境
:test_build:
  :environments:
    - :hw_version_1
    - :hw_version_2

# 开启覆盖率统计(为后续合并做准备)
:gcov:
  :enabled: true
  :gcovr:
    :enabled: true
  1. 调整单元测试代码
    将不同版本的测试逻辑拆分到对应环境的测试用例中,结构更清晰:
#include "unity.h"
#include "my_driver.h"

// HW_VERSION_1 专属测试用例
#ifdef HW_VERSION_1
TEST_CASE("HWv1: myfunction 参数超出[0,5]范围时返回错误", "[hw1]")
{
  check_if_param_invalid((int[]){-1, 6});
}

TEST_CASE("HWv1: myfunction 合法参数调用时执行fct1", "[hw1]")
{
  fct1_Expect();
  TEST_ASSERT_TRUE(myfunction(3));
}
#endif

// HW_VERSION_2 专属测试用例
#ifdef HW_VERSION_2
TEST_CASE("HWv2: myfunction 参数超出[5,10]范围时返回错误", "[hw2]")
{
  check_if_param_invalid((int[]){4, 11});
}

TEST_CASE("HWv2: myfunction 合法参数调用时执行fct2", "[hw2]")
{
  fct2_Expect();
  TEST_ASSERT_TRUE(myfunction(6));
}
#endif
  1. 执行全版本测试
    运行以下命令,Ceedling会自动分别编译两个版本的代码和测试用例,并执行所有测试:
ceedling test:all

二、合并多版本覆盖率结果

默认情况下Ceedling会为每个环境生成单独的覆盖率报告,我们可以用gcovr工具合并这些结果,得到包含所有硬件分支的单一覆盖率报告:

  1. 安装gcovr
    确保环境中已安装gcovr(可通过pip安装:pip install gcovr)

  2. 生成合并覆盖率报告
    在项目根目录执行以下命令,扫描所有测试生成的gcov文件,合并后生成HTML格式的详细覆盖率报告:

gcovr -r . --html --html-details -o build/test/reports/combined_coverage.html
  1. 集成到Ceedling任务(可选)
    如果想一键完成测试+合并,可以在project.yml中添加自定义任务:
:tasks:
  :combined_coverage:
    - ceedling test:all
    - gcovr -r . --html --html-details -o build/test/reports/combined_coverage.html

之后只需运行ceedling combined_coverage即可完成所有操作。

通过以上方案,你可以在单个项目中完成两个硬件版本的测试验证,并且得到一份包含所有#ifdef分支的全代码库覆盖率报告,直观掌握整体测试质量。

内容的提问来源于stack exchange,提问作者G. B.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:27:18