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