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

详细代码:

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

代码如下:

//
// 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

代码如下:

//
// 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、入口文件

代码如下:

#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
 
 
 
推荐

CLion之C++框架篇-优化框架,单元测试(二)的更多相关文章

  1. CLion之C++框架篇-优化框架,引入boost(三)

      背景   结合上一篇CLion之C++框架篇-优化框架,单元测试(二),继续进行框架优化!这一版优化引入一个我们日常经常使用的操作库Boost,估算使用频率在70%以上!   Boost的优势在哪 ...

  2. CLion之C++框架篇-优化开源框架,引入curl,实现get方式获取资源(四)

      背景   结合上一篇CLion之C++框架篇-优化框架,引入boost(三),继续进行框架优化!在项目中,我们经常会通过get方式拉取第三方资源,这一版优化引入类库curl,用来拉取第三方资源库. ...

  3. linux下使用gtest框架进行c/c++单元测试

    linux下使用gtest框架进行c/c++单元测试 前言 关于此次开发工具的选择,因为我最近尝试在linux下使用vim进行c/c++编程,且之前已经对vim进行了相关的配置,所以这里应作业要求直接 ...

  4. java基础之框架篇(1)

    框架基础反射:反射是Java开发的一类动态相关机制.因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念. 问题:Java中创建实例化对象有哪些方式? ...

  5. 滴滴Booster移动APP质量优化框架 学习之旅 三

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源 ...

  6. 第一篇web框架

    第一篇web框架 http协议 web应用和web框架 主 文 http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维 ...

  7. [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  8. 滴滴 App 的质量优化框架 Booster,开源了!

    一. 序 当 App 达到一定体量的时候,肯定是要考虑质量优化.有些小问题,看似只有 0.01% 触发率,但是如果发生在 DAU 过千万的产品中,就很严重了. 滴滴这个独角兽的 DAU 早已过千万,自 ...

  9. Spring Boot 揭秘与实战(三) 日志框架篇 - 如何快速集成日志系统

    文章目录 1. 默认的日志框架 logback2. 常用的日志框架 log4j 1.1. 日志级别 1.2. 日志文件 3. 源代码 Java 有很多日志系统,例如,Java Util Logging ...

随机推荐

  1. python 基础 ----- 变量

    ------  python注释 注释的作用:代码提示,运行时忽略不必要的代码 注释的三种方式: 1.“#” 单行注释 2.多行注释   三个单引号  和三个双引号都可以 注释的快捷键 Ctrl + ...

  2. json转换对象中出现null属性的解决方法

    前言:当数据进行json转换时,当属性值为null时,json解析就会中断,导致接下来的数据无法正确获取.原则上来讲服务器端发送的json字符串不允许存在属性值为空的情况,但是如果服务器端发送了nul ...

  3. Vue源码学习(一)———数据双向绑定 Observer

    从最简单的案例,来学习Vue.js源码. <body> <div id='app'> <input type="text" v-model=" ...

  4. 4-20arget 属性和hover

    1.target 属性 定义和用法 target 属性规定在何处打开 action URL. 值 描述 _blank 在新窗口中打开. _self 默认.在相同的框架中打开. _parent 在父框架 ...

  5. 基本HTML结构

    配置:在vs code中声明页面为html,然后添加open in browser,view in browser插件通过快捷键alt+b实现在浏览器中查看编写好的html界面 基本成分: <! ...

  6. BundleConfig某js文件 全部打包

    var server = HttpContext.Current.Server; var jsFiles = System.IO.Directory.GetFiles(server.MapPath(& ...

  7. PowerDesigner反向生成PDM和name与注释互换

    Option Explicit ValidationMode = True InteractiveMode = im_Batch Dim mdl 'the current model 'get the ...

  8. iOS.ObjC.__attribute__-directives

    __attribute__ Directives Reference 1. __attribute__ directives in Objective-C (AAAA+) (Read Again) h ...

  9. rtx tiny os

    一,简单测试步骤: 1.  license management包含两项:artx51 real time os, PK51 2. code #include "rtx51tny.h&quo ...

  10. python学习——用dictionary实现通过地区查询邮编

    刚刚学习了python的基本语法,对自己学习的内容进行实践下. dictionary字典(类似map) 总结:1.dictionary比list读取速度快,但是占用内存大,适合存放不需修改,经常查询的 ...