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

相关推荐
Apifox9 小时前
【测试套件】当用户说“我只想跑 P0 用例”时,我们到底在说什么
单元测试·测试·ab测试
金銀銅鐵3 天前
浅解 JUnit 4 第十一篇:@Before 注解和 @After 注解如何发挥作用?
junit·单元测试
金銀銅鐵5 天前
浅解 JUnit 4 第十篇:方法上的 @Ignore 注解
junit·单元测试
阿狸猿7 天前
单元测试中静态测试、动态测试及白盒测试、回归测试实践
单元测试·软考
Max_uuc7 天前
【工程心法】从“在板盲调”到“云端验证”:嵌入式单元测试与 TDD 的工程化革命
单元测试·tdd
feathered-feathered7 天前
测试实战【用例设计】自己写的项目+功能测试(1)
java·服务器·后端·功能测试·jmeter·单元测试·压力测试
测试渣7 天前
持续集成中的自动化测试框架优化实战指南
python·ci/cd·单元测试·自动化·pytest
minh_coo8 天前
Spring单元测试之反射利器:ReflectionTestUtils
java·后端·spring·单元测试·intellij-idea
金銀銅鐵9 天前
浅解 JUnit 4 第九篇:JUnitCore (下)
junit·单元测试