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

相关推荐
꧁༺℘₨风、凌๓༻꧂3 天前
C# MES .NET Framework Winform 单元测试
单元测试·c#·.net
IMPYLH4 天前
Lua 的 pairs 函数
开发语言·笔记·后端·junit·单元测试·lua
倚肆4 天前
Spring Boot 测试注解全解:从单元测试到集成测试
spring boot·单元测试·集成测试
安冬的码畜日常4 天前
【JUnit实战3_35】第二十二章:用 JUnit 5 实现测试金字塔策略
测试工具·junit·单元测试·集成测试·系统测试·bdd·测试金字塔
码农BookSea4 天前
用好PowerMock,轻松搞定那些让你头疼的单元测试
后端·单元测试
少云清5 天前
【软件测试】5_测试理论 _软件测试分类(重点)
软件测试·单元测试·uat测试·sit测试
秃了也弱了。5 天前
testng:Java界功能强大的单元测试框架
java·单元测试·log4j
川石课堂软件测试5 天前
自动化过程中验证码的解决思路
数据库·python·功能测试·测试工具·单元测试·tomcat·自动化
十二测试录6 天前
测试用例,常见的一些问题
功能测试·单元测试·测试用例·压力测试·可用性测试
x***J3486 天前
测试驱动开发:从单元测试到集成测试
驱动开发·单元测试·集成测试