Lazy loaded image
二、CLion 集成 gtest 单元测试框架
Words 1293Read Time 4 min
2024-11-26

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

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

2.1.2 Test runner

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

2.1.3 Code generation for Google tests

notion image

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说明。

2.2.1 添加Google Test框架

notion image
  1. 根路径上创建 test 文件夹,并新建 gtest 文件夹,下载GitHub - google/googletest: GoogleTest - Google Testing and Mocking Framework源码放入。
  1. 添加对应文件夹,内部放置每个不同模块的测试文件。比如 lib 文件下,mem 模块和 ringbuffer测试文件(cpp格式)。
    1. notion image
  1. 添加 CMakeLists.txt 文件,添加如下内容:
    1. 根文件夹下CMakeLists.txt 尾部添加如下内容:
      1. 重载项目。
      1. 点击gutter icon,点击运行。
        1. notion image

      2.2.2 运行/调试配置

      转到 运行 | 编辑配置,点击  并选择其中一个特定于框架的模板:
      notion image
      notion image
      ⚠️
      CLion 自动为与 gtest 或 gmock 关联的 Cmake 目标创建 Google Test 配置,以及为检测到的 Doctest 目标创建 Doctest 配置。
      1. 框架不同,指定不同 pattern, suite, 或者tags(for Catch2)。
      1. 测试类型指定为pattern,可以使用通配符匹配多组测试。
      1. 可指定程序参数和环境变量,比如 Google test 指定 --gtest_repeat=3, 程序执行三次。
      notion image

      参考资料

      1. Unit testing tutorial | CLion Documentation
      1. Google Test | CLion Documentation
      上一篇
      模板设计模式:让你的代码结构更清晰
      下一篇
      Guide to Linux System

      Comments
      Loading...