基于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 文件,可以看到更直观的覆盖率报告,包括函数覆盖率、行覆盖率、分支覆盖率等。

相关推荐
许彰午12 天前
39_Java单元测试JUnit入门
java·junit·单元测试
果子耶耶12 天前
让大模型帮我写单元测试,5个模型的覆盖率和边界处理能力实测
chatgpt·单元测试
川石课堂软件测试13 天前
APP自动化测试|高级手势操作&toast操作
css·功能测试·测试工具·microsoft·fiddler·单元测试·harmonyos
Thecozzy15 天前
单元测试 vs 手工测试:以水印功能为例
单元测试
HLAIA光子16 天前
AI Coding框架,打好TDD和SDD这两拳
单元测试·ai编程·代码规范
霸道流氓气质16 天前
Java 单元测试生成大量 Excel 测试数据实战指南
java·单元测试·excel
川石课堂软件测试16 天前
UI自动化测试|下拉选择框&弹出框&滚动条操作实践
开发语言·python·jmeter·ui·docker·单元测试·harmonyos
川石课堂软件测试17 天前
UI自动化测试|元素操作&浏览器操作实践
功能测试·测试工具·mysql·ui·docker·容器·单元测试
无聊的老谢17 天前
电信系统中的单元测试策略:构建高可靠性的微服务防线
数据库·微服务·单元测试