背景
结合上一篇CLion之C++框架篇-安装工具,基础框架的搭建(一),继续进行框架优化!
googletest(GTest)是Google开源的C++测试框架,与CLion组合,对C++环境开发真算得上是双剑合璧。
我的目标是在CLion工程中集成GTest,进行框架优化。
安装GTest
源码位置:https://github.com/google/googletest
下载地址为:https://github.com/google/googletest/archive/master.zip
放置到对应的工程目录下面,如图:

优化我的CMakeLists.txt
详细代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | cmake_minimum_required(VERSION 3.8) project(work) message( "------------ Options -------------" ) message( " CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}" ) message( " CMAKE_BUILD_TYPE: Hello World!" ) # 编译google test,会在当前目录生成libtest.a静态库 add_subdirectory(. /googletest ) #头文件 include_directories(${PROJECT_SOURCE_DIR} /src/include . /googletest/include ) #源文件 aux_source_directory(${PROJECT_SOURCE_DIR} /src/main dir_srcs) #库文件 : libtest.a 添加到链接路径中 link_directories(${PROJECT_SOURCE_DIR} /lib ${PROJECT_SOURCE_DIR} /googletest ) #需要添加googletest运行需要的pthread set (LIBRARIES pthread) #编译器相关设置 set (CMAKE_CXX_STANDARD 11) set (CMAKE_CXX_COMPILER "clang++" ) # 显示指定使用的C++编译器 set (CMAKE_CXX_FLAGS "-g" ) # 调试信息 set (CMAKE_CXX_FLAGS "-Wall" ) # 开启所有警告 set (WORK ${dir_srcs}) add_custom_target(cmake-build-debug) add_executable(${PROJECT_NAME} ${WORK}) target_link_libraries(${PROJECT_NAME} gtest) |
做个简单的测试
case:字符串去掉空格处理

优化框架
思路:日常使用中,建议把这些代码放置到每个实现函数文件中,然后通过宏去控制!
1、公共文件common.h
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // // Created by Zhou,Baochuan on 18/5/25. // #ifndef WORK_COMMON_H #define WORK_COMMON_H #include <iostream> #include <string> #define ENV_DEBUG #ifdef ENV_DEBUG #include <gtest/gtest.h> #endif using namespace std; #endif //WORK_COMMON_H |
2、实现文件,如字符串工具类:string_util.cpp
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | // // Created by Zhou,Baochuan on 18/5/25. // #include <iostream> #include "string_util.h" using namespace work; using namespace std; string StringUtil::ltrim(string str) { string chars = "\t\n\v\f\r " ; str.erase(0, str.find_first_not_of(chars)); return str; } string StringUtil::rtrim(string str) { string chars = "\t\n\v\f\r " ; str.erase(str.find_last_not_of(chars) + 1); return str; } string StringUtil::trim(string str) { return ltrim(rtrim(str)); } #ifdef ENV_DEBUG TEST(string_util, trim) { string src1 = " 空格校验 " ; string src2 = StringUtil::trim(src1); EXPECT_STREQ( "空格校验" , src2.c_str()); EXPECT_STREQ( "空格校验 " , src2.c_str()); } #endif |
3、入口文件
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include "common.h" #include "string_util.h" using namespace work; #ifndef ENV_DEBUG int main( int argc, char ** argv) { string src = " OK" ; cout << StringUtil::trim(src) << endl; return 0; } #else GTEST_API_ int main( int argc, char ** argv) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } #endif |
4、上线的时候,把这个common.h文件中的定义删除掉,如图:
5、运行部分样例,如图:
资源分享
优化后-框架代码:https://github.com/rtxbc/cplus/tree/master/work
googletest 说明文档(源代码的docs目录里有说明)
翻译后文档:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html
推荐

喜欢编程
分类:
C Language
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库