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

Ceedling

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

1.环境搭建

1.1 Ruby环境

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的环境

sudo gem install ceedling -v 0.31.1

1.3 安装gcovr 生成 HTML 报告

sudo apt install gcovr

2.初始化项目:

ceedling new MyProject
cd MyProject

2.1 编写测试代码:

将测试代码和源代码放入 test/src/ 目录中,Ceedling 会自动处理编译和测试。
src 目录中放入待测试代码的.c和.h文件
test 目录中编写测试代码,注意,代码文件名需要以test开头,如testXXX.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,
<think>好的,我现在需要回答用户关于Ceedling框架的介绍及使用教程的问题。用户提到可能涉及安装、配置、使用方法和最佳实践。首先,我应该回忆一下Ceedling的基本信息,它是一个用于C项目的单元测试框架,基于Ruby,结合了Unity和CMock等工具。 接下来,我需要参考用户提供的四个引用内容。引用1提到Ceedling用于嵌入式C应用的单元测试;引用2指出它是Ruby构建的,项目地址在GitCode;引用3涉及安装命令和GCC编译器;引用4介绍了Unity和CMock作为核心组件,以及可能有教程内容。 用户需要结构清晰的回答,逐步解决问题,并保证真实可靠。需要分步骤讲解安装、配置、使用等。同时,注意使用中文,正确应用LaTeX格式的数学公式,不过在这个主题中可能数学公式较少,但如果有测试代码或命令,需要适当展示。 可能需要先介绍Ceedling是什么,组成部分,然后安装步骤,项目创建,编写测试用例,运行测试,以及高级功能如Mocking。需要确保各部分信息准确,引用正确来源,比如安装命令来自引用3,项目结构参考引用4等。 还要生成相关问题,可能涉及与其他测试框架的比较、常见问题解决、集成到持续集成等。需要检查是否遗漏了用户可能关心的点,比如依赖环境(Ruby、GCC),配置文件修改,测试报告生成等。 最后,确保回答符合系统级指令,如行内公式用$...$,独立公式用$$...$$,但这个问题可能较少涉及数学公式。代码块需要用正确语法高亮,例如Ruby或C的代码示例。</think>### Ceedling框架介绍及使用教程 Ceedling是一个基于Ruby的自动化测试框架,专为C语言项目设计,尤其适合嵌入式系统开发。它整合了测试框架$Unity$(用于编写测试用例)、$CMock$(用于模拟函数)和$CEXCEPTION$(异常处理),支持自动化构建、测试执行与覆盖率分析[^4]。 --- #### 一、核心组件 1. **Unity** 轻量级单元测试框架,提供断言宏(如`TEST_ASSERT_EQUAL_INT`)和测试运行管理,语法简洁: ```c void test_addition(void) { TEST_ASSERT_EQUAL_INT(5, add(2,3)); // 验证2+3=5 } ``` 2. **CMock** 自动生成函数模拟代码,解决依赖隔离问题。例如模拟硬件接口函数: ```c void I2C_Read_ExpectAndReturn(uint8_t addr, int retval); ``` 3. **CException** 支持C语言中的异常处理机制,通过`Try/Catch`捕获错误[^4]。 --- #### 二、安装步骤 1. **安装Ruby环境** Ceedling依赖Ruby,需先安装Ruby 2.0+: ```bash sudo apt-get install ruby-full # Linux brew install ruby # macOS ``` 2. **安装Ceedling** 通过Gem安装指定版本(推荐0.30.0兼容性最佳[^3]): ```bash gem install ceedling -v 0.30.0 ``` 3. **验证安装** ```bash ceedling version # 输出版本号即成功 ``` --- #### 三、创建项目 1. **初始化项目结构** ```bash ceedling new MyProject # 生成项目目录 ``` 生成的文件包括: - `project.yml`:主配置文件 - `src/`:存放源代码 - `test/`:测试用例目录 2. **配置编译器** 修改`project.yml`指定编译器(如GCC): ```yaml :tools: :test_compiler: :executable: gcc :arguments: ["-Wall", "-O0"] ``` --- #### 四、编写与运行测试 1. **创建测试文件** 在`test/`下新建`test_calculator.c`: ```c #include "unity.h" #include "calculator.h" void setUp(void) {} // 初始化 void tearDown(void) {} // 清理 void test_add(void) { TEST_ASSERT_EQUAL_INT(10, add(7,3)); } ``` 2. **运行测试** ```bash ceedling test:all # 执行所有测试 ``` 输出结果示例: ``` Test 'test_calculator.c' --------------------------- PASS - test_add ``` 3. **生成覆盖率报告** 添加配置后运行: ```bash ceedling gcov:all # 生成HTML报告在build/artifacts/gcov ``` --- #### 五、高级功能 1. **函数模拟(Mocking)** 使用CMock模拟外部依赖: ```c #include "mock_uart.h" void test_send_data(void) { UART_Send_Expect(0x55); // 预期调用UART_Send(0x55) send_packet(0x55); // 调用被测函数 } ``` 2. **集成持续集成** 在CI脚本中添加测试命令: ```yaml # GitHub Actions示例 - name: Run Tests run: ceedling test:all ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值