CLion之C++框架篇-优化框架,单元测试(二)

背景

结合上一篇
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

CLion之C++框架篇-优化框架,单元测试(二)

详细代码:

bash;collapse:true;;gutter:true; cmake_minimum_required(VERSION 3.8)</p> <p>project(work)</p> <p>message("------------ Options -------------") message(" CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}") message(" CMAKE_BUILD_TYPE: Hello World!")</p> <p>编译google test,会在当前目录生成libtest.a静态库 add_subdirectory(./googletest)</p> <h1>头文件</h1> <p>include_directories(${PROJECT_SOURCE_DIR}/src/include ./googletest/include)</p> <h1>源文件</h1> <p>aux_source_directory(${PROJECT_SOURCE_DIR}/src/main dir_srcs)</p> <h1>库文件 : libtest.a 添加到链接路径中</h1> <p>link_directories(${PROJECT_SOURCE_DIR}/lib ${PROJECT_SOURCE_DIR}/googletest)</p> <h1>需要添加googletest运行需要的pthread</h1> <p>set(LIBRARIES pthread)</p> <h1>编译器相关设置</h1> <p>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})</p> <p>add_custom_target(cmake-build-debug) add_executable(${PROJECT_NAME} ${WORK})</p> <p>target_link_libraries(${PROJECT_NAME} gtest)</p> <pre><code> 做个简单的测试 case:字符串去掉空格处理 ![CLion之C++框架篇-优化框架,单元测试(二)](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/152332-20180530200453545-1855518903.png) 优化框架 > 思路:日常使用中,建议把这些代码放置到每个实现函数文件中,然后通过宏去控制! 1、公共文件common.h ![CLion之C++框架篇-优化框架,单元测试(二)](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/152332-20180530202009071-184609639.png) 代码如下: ;collapse:true;;gutter:true;
//
// Created by Zhou,Baochuan on 18/5/25.

//
#ifndef WORK_COMMON_H
#define WORK_COMMON_H
#include
#include

#define ENV_DEBUG
#ifdef ENV_DEBUG
#include
#endif

using namespace std;

#endif //WORK_COMMON_H

2、实现文件,如字符串工具类:string_util.cpp

代码如下:

cpp;collapse:true;;gutter:true; // // Created by Zhou,Baochuan on 18/5/25.</p> <p>//</p> <h1>include</h1> <h1>include "string_util.h"</h1> <p>using namespace work; using namespace std;</p> <p>string StringUtil::ltrim(string str) { string chars = "\t\n\v\f\r "; str.erase(0, str.find_first_not_of(chars)); return str; }</p> <p>string StringUtil::rtrim(string str) { string chars = "\t\n\v\f\r "; str.erase(str.find_last_not_of(chars) + 1); return str; }</p> <p>string StringUtil::trim(string str) { return ltrim(rtrim(str)); }</p> <h1>ifdef ENV_DEBUG</h1> <p>TEST(string_util, trim) { string src1 = " 空格校验 "; string src2 = StringUtil::trim(src1); EXPECT_STREQ("空格校验", src2.c_str()); EXPECT_STREQ("空格校验 ", src2.c_str()); }</p> <h1>endif</h1> <pre><code> 3、入口文件 ![CLion之C++框架篇-优化框架,单元测试(二)](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/152332-20180530202145969-1444641188.png) 代码如下: ;collapse:true;;gutter:true;
#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文件中的定义删除掉,如图:

CLion之C++框架篇-优化框架,单元测试(二)

5、运行部分样例,如图:

CLion之C++框架篇-优化框架,单元测试(二)

资源分享

优化后-框架代码:https://github.com/rtxbc/cplus/tree/master/work

googletest 说明文档(源代码的docs目录里有说明)

翻译后文档:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html

推荐

Original: https://www.cnblogs.com/baochuan/p/9113145.html
Author: 川山甲
Title: CLion之C++框架篇-优化框架,单元测试(二)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/535592/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • c/c++本地时间获取

    在记录程序日志时,需要记录时间。如下: 即Y为年、m为月、d为日、X为具体时分秒、A为星期、j为天数、z为其他,结果如下: 如果通过函数返回,需要这样: 其中,char tmp[6…

    C++ 2023年5月29日
    062
  • vscode c++ 编译生成后,调试时无法命中断点

    1 //test.cpp 2 #include 3 int g_var = 0; 4 void print_line(char *str) 5 { 6 if (str != NUL…

    C++ 2023年5月29日
    067
  • Mac eclipse 编译、调试c++ 程序

    可以先安装个CDT插件: eclipse菜单 -> Help -> Install New Software… -> Work with (Add…..

    C++ 2023年5月29日
    054
  • c++ string 和wstring 之间的互相转换函数

    #include <string> std::string ws2s(const std::wstring& ws) { std::string curLoca…

    C++ 2023年5月29日
    057
  • C/C++标准新特性简介

    参考文档 C语言的起源发展 C语言诞生于1972年,美国贝尔实验室。作者为:Dennis MacAlistair Ritchie(丹尼斯·里奇) & Kenneth Lan…

    C++ 2023年5月29日
    083
  • Cannot find a C++ compiler that supports both C++11 and the specified C++ flags.

    Linux 安装 cmake 时候出现的问题,解决方法: yum install gcc-c++ Original: https://www.cnblogs.com/hunttow…

    C++ 2023年5月29日
    056
  • 【转】C++右值引用和std::move

    《一文读懂C++右值引用和std::move》 それでも私の大好きな人 posted @2021-03-02 21:29 阿玛尼迪迪 阅读(86 ) 评论() 编辑 Origina…

    C++ 2023年5月29日
    061
  • Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题

    最近在移植网络摄像机里的p2p库到android平台,需要用到jni,最近在c线程了调用java函数的时候出现一个问题,假如在同一个线程调用java函数是没问题的,但在一个c线程了…

    C++ 2023年5月29日
    031
  • Windows11搭建c/c++开发环境

    有了”c/c++”分类下的前边那些”基本概念1-9″以及”Windows上的gcc”的铺垫,终于可以搭建开发…

    C++ 2023年5月29日
    078
  • libj 0.8.2 发布,Java/JavaScript API 的 C++ 实现

    libj 0.8.2 增加了一些新的字符串相关的方法。 libj 是一个跨平台的运行库,相当于提供了类似 Java/JavaScript API。libj 的内存管理是自动的,基于…

    C++ 2023年5月29日
    049
  • c++ 11新特性学习1

    static_assert 静态断言,特点是编译期的断言检查 assert 运行时期的断言检查 二者参数用法相同 Original: https://www.cnblogs.com…

    C++ 2023年5月29日
    059
  • 客户端单元测试实践——C++篇

    作者 | 思兼来源 | 阿里开发者公众号 背景 我们团队在手淘中主要负责BehaviX模块,代码主要是一些逻辑功能,很少涉及到UI,为了减少双端不一致问题、提高性能,我们采用了将核…

    C++ 2023年5月29日
    068
  • C++内存管理

    [ 导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内…

    C++ 2023年5月29日
    050
  • 聊聊 C++ 中的几种智能指针 (上)

    一:背景 我们知道 C++ 是手工管理内存的分配和释放,对应的操作符就是 new/delete 和 new[] / delete[], 这给了程序员极大的自由度也给了我们极高的门槛…

    C++ 2023年5月29日
    085
  • C++ 回调函数(CallBack)的用法分析

    本文实例分析了C++中回调函数(CallBack)的用法。分享给大家供大家参考。具体分析如下: 如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是…

    C++ 2023年5月29日
    051
  • 【面试攻略】C++面试-边锋

    2020-11-26-边锋 1.说说你以前的架构2.C++11特性,好像问到了这个constexpr https://www.jianshu.com/p/5480c4a35d1d3…

    C++ 2023年5月29日
    061
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球