基于Ceedling的嵌入式软件单元测试

Ceedling

如果你使用 Ceedling(一个针对 C 代码单元测试的构建管理器),可以更方便地管理测试。Ceedling 会自动处理 Unity 和 CMock 的集成,无需手动编写 Makefile

1.环境搭建

1.1 Ruby环境

bash 复制代码
sudo apt-get install ruby

1.2 安装 Ceedling:

首先我们要知道 gem (类似于 python 的 pip 、Ubuntu 中的 apt-get 、Node.js 的 NPM 等等)是一个管理 Ruby 库和程序的标准包,通过 gem 可以十分便捷的安装、升级和卸载软件。

常见的 Ruby gem 指令:

gem -v gem版本

gem -h help

gem install -h install帮助

gem update 更新所有包

gem install PACKAGENAME -v PACKAGEVERSION 安装指定版本的软件包

gem environment 查看gem的环境

bash 复制代码
sudo gem install ceedling -v 0.31.1

1.3 安装gcovr 生成 HTML 报告

bash 复制代码
sudo apt install gcovr

2.初始化项目:

bash 复制代码
ceedling new MyProject
cd MyProject

2.1 编写测试代码:

将测试代码和源代码放入 test/src/ 目录中,Ceedling 会自动处理编译和测试。
src 目录中放入待测试代码的.c和.h文件
test 目录中编写测试代码,注意,代码文件名需要以test开头,如testXXX.c,内容如下

c 复制代码
#include "unity.h"
#include "utils.h"

void setUp(void)
{
    printf("setup...\n");
}

void tearDown(void)
{
    printf("tearDown...\n");
}

void testAdd(void)
{
    TEST_ASSERT_EQUAL(4, add(2, 2));
    TEST_ASSERT_EQUAL(0, add(0, 0));
    TEST_ASSERT_EQUAL(-2, add(-1, -1));
    TEST_ASSERT_EQUAL(1, add(-1, 2));
}

2.2 运行测试:

bash 复制代码
ceedling test:all

2.3 生成覆盖率报告

覆盖率是单元测试中一个很重要的指标,它可以帮助我们了解测试用例的覆盖情况,帮助我们发现测试用例的不足之处。Ceedling 也可以生成覆盖率报告,只需要在 project.yml 文件中配置plugins相关参数即可。

yml 复制代码
:gcov:
 
  :reports:
 
    - HtmlDetailed
 
  :gcovr:
 
    :html_medium_threshold: 75
 
    :html_high_threshold: 90
    
:plugins:
 
  :load_paths:
 
    - "#{Ceedling.load_path}"
 
  :enabled:
 
    - stdout_pretty_tests_report
 
    - module_generator
 
    - gcov # 新增使能gcov
bash 复制代码
ceedling gcov:all
bash 复制代码
gcovr -r . --html --html-details -o build/artifacts/gcov/index.html

运行完毕后可以在 build/artifacts/gcov 目录下找到。在浏览器中打开 index.html 文件,可以看到更直观的覆盖率报告,包括函数覆盖率、行覆盖率、分支覆盖率等。

相关推荐
Python私教2 小时前
鸿蒙应用的测试和调试完全指南:从单元测试到性能分析
华为·单元测试·harmonyos
realhuizhu19 小时前
周五下午5点改完的代码,你敢直接发布上线吗?
自动化测试·单元测试·ai编程·测试驱动开发·代码质量
我一定会有钱1 天前
pytest测试框架基础
python·单元测试·自动化·pytest
宋情写1 天前
单元测试、覆盖率测试-Springboot
spring boot·单元测试·测试覆盖率
卓码软件测评3 天前
第三方APP软件测试机构:【Gatling如何测试移动应用后端API移动网络特性和用户行为模拟】
网络·测试工具·单元测试·测试用例
晚烛3 天前
Flutter + OpenHarmony 质量保障体系:从单元测试到真机巡检的全链路可靠性工程
flutter·单元测试
旺仔Sec3 天前
2025年安徽省职业院校技能大赛(高职组)软件测试赛项规程及竞赛样题(附评分标准)
功能测试·单元测试·压力测试
記億揺晃着的那天5 天前
MyBatis-Plus 单元测试中 Lambda Mock 的坑与解决
单元测试·log4j·mybatis
CeshirenTester6 天前
Playwright元素定位详解:8种定位策略实战指南
人工智能·功能测试·程序人生·单元测试·自动化
行走的陀螺仪6 天前
Vue3 项目单元测试全指南:价值、Vitest 落地与提效方案
开发语言·前端·单元测试·html5·vitest