2.1 CLion测试功能简介2.1.1 Gutter icons for tests2.1.2 Test runner2.1.3 Code generation for Google tests2.2 集成 gtest 测试框架2.2.1 添加Google Test框架2.2.2 运行/调试配置参考资料
2.1 CLion测试功能简介
CLion 支持 Google Test, Boost.Test, Catch2,和 Doctest 单元测试框架。
特性 | Google Test | Boost.Test | Catch2 | Doctest |
功能特性 | 丰富的断言、测试夹具、参数化测试等 | 功能全面,包括性能和异常测试 | 简单易用的断言机制,支持 BDD 风格 | 类似 Catch2,但更轻量级 |
易用性 | 语法清晰,适合中大型项目 | 复杂度高,学习曲线陡峭 | 语法简洁,易于上手 | 语法简洁,适合嵌入现有项目 |
编译时间 | 较长 | 较长,尤其是高级功能 | 较短,适合快速迭代 | 非常短,目标是最快编译 |
集成与支持 | 与 Google Mock 集成良好,广泛支持 | 需要 Boost 依赖,集成性好 | 易于集成,支持多种 IDE 和 CI 工具 | 易于集成,适合快速编译和测试 |
社区和文档 | 活跃社区和详尽文档 | 活跃社区,但复杂度高 | 活跃社区支持,文档友好 | 社区较小,但文档清晰 |
CLion还为这些框架提供便捷的功能,下面简单介绍,详细的可查看参考文档。
2.1.1 Gutter icons for tests

当点击Gutter icons后,会创建临时配置,通过打开Edit Configurations点击保存按钮可保存运行配置。

2.1.2 Test runner

您还可以在提交之前执行测试。在提交工具窗口中选中“运行测试”复选框,并选择要运行的配置:

2.1.3 Code generation for Google tests

2.2 集成 gtest 测试框架
也许读者会有疑惑,为何不使用前文所提的C单元测试框架,而要选择gtest测试框架。使用gtest测试框架,编写测试用例需要使用C++。
第一是gtest使用广泛、稳定可靠、对中大型项目支持良好。与 Google Mock 集成良好,更好支持我们提倡的开发模式(应用层和抽象层基于PC开发,通过mock来开展测试验证,避免频繁的硬件测试和验证)。
第二是虽然C++编写测试用例可能对于擅长C语言的用户不太友好,但应用层和抽象层若用C++高效开发, 显然引入支持C++的测试框架,更有利于嵌入式C后期的拓展。且测试用例C++语法本事不复杂, 兴起的GPT工具也可以辅助用户快速写出测试代码。
第三是通过extern “C” 支持,C++和C的混合编译很容易实现。
最后一条,CLion集成开发环境对Google Test提供了极好的支持,无论是搭建、编写、运行和调试都非常便捷,很难拒绝这么好用的工具。
extern”C” 的作用
由于 C++ 支持重载,在编译后的函数符号会有差别。
C++ 可以兼容 C 的语法,C/C++ 主要的区别是编译函数符号规则不一样,C 语言代码编译后的函数名还是原来函数名,C++ 代码编译后的函数名带有参数信息。
做个测试来检验一下。一个简单的函数,分别用C和C++进行编译。
hello1.c
hello2.cpp
编译
查看符号表
从上面信息可以看出,C语言编译后的函数符号还是原函数名,而 C++ 编译后的函数符号由test变成了_Z4testiPc,从这个符号名字可以看出 test 前面有个数字 4 应该是函数名长度,test后面i Pc应该就是函数的参数签名。C++之所以这样规定编译后的函数符号是因为面向对象的C++具有函数重载功能,以此来区分不同的函数。
extern”C”的作用在于C++代码中调用的C函数的声明,或C中调用C++中编译的函数要。
- C++ 调用C函数时,需要在C的头文件中添加,或者在 CPP 源文件头引入 C 头文件时添加extern c
- C 调用 C++ 函数时,需要在CPP头文件中添加extern c说明。
案例可参考C调用C++库和C++调用C库的方法
2.2.1 添加Google Test框架

- 根路径上创建 test 文件夹,并新建 gtest 文件夹,下载GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework源码放入。
- 添加对应文件夹,内部放置每个不同模块的测试文件。比如 lib 文件下,mem 模块和 ringbuffer测试文件(cpp格式)。

- 添加 CMakeLists.txt 文件,添加如下内容:
- 根文件夹下CMakeLists.txt 尾部添加如下内容:
- 重载项目。
- 点击gutter icon,点击运行。

2.2.2 运行/调试配置
转到 运行 | 编辑配置,点击 并选择其中一个特定于框架的模板:

CLion 自动为与 gtest 或 gmock 关联的 Cmake 目标创建 Google Test 配置,以及为检测到的 Doctest 目标创建 Doctest 配置。
- 框架不同,指定不同 pattern, suite, 或者tags(for Catch2)。
- 测试类型指定为pattern,可以使用通配符匹配多组测试。
- 可指定程序参数和环境变量,比如 Google test 指定 --gtest_repeat=3, 程序执行三次。
