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

最新文章

  1. 实战动态PDF在线预览及带签名的PDF文件转换
  2. cocos2d-x 帧循环不严谨造成场景切换卡顿
  3. 2 NFS高可用解决方案之NFS的搭建
  4. php 获取指定日期所在月份的最后一天
  5. JBOSS实现RMI时注意的问题
  6. EntityFramework 和 linq 判断是否在指定时间段内的方法
  7. Verilog之event的用法
  8. linux 各种发行版及包管理器的关系
  9. 用Flask实现视频数据流传输
  10. Datatable转换为Json 然后,Json数据导入 js 档
  11. 一段代码详解JavaScript面向对象
  12. IdentityServer4 记录
  13. 编译原理 First,Follow,select集求法
  14. flask-sqlalchemy 一对一,一对多,多对多操作
  15. Porsche Piwis Tester II V14.000 with CF30 Laptop at autonumen.com
  16. Python全栈-day12-day13-函数4
  17. php json_encode在CI框架中的使用细节
  18. SharePoint CAML Query小结
  19. lintcode 刷题 by python 总结(1)
  20. SQL Server 2016/2014/2012/2008/2005/2000简体中文企业版下载地址

热门文章

  1. CentOS 7 lnmp环境配置laravel项目的问题总结!
  2. Wordpress 后台更改网址
  3. [leetcode]68. Text Justification文字对齐
  4. MySQL:缓存算什么东西?!
  5. sonar之阿里巴巴java规则(p3c)
  6. MathExam Lv2
  7. python生成器 获取 目录下文件
  8. ACM(图论)——tarjan算法详解
  9. Anaconda的安装及使用
  10. Beta冲刺吐槽&amp;&amp;获小黄衫心得