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


详细代码:
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)
思路:日常使用中,建议把这些代码放置到每个实现函数文件中,然后通过宏去控制!
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、运行部分样例,如图:


CLion之C++框架篇-优化框架,单元测试(二)的更多相关文章
- CLion之C++框架篇-优化框架,引入boost(三)
背景 结合上一篇CLion之C++框架篇-优化框架,单元测试(二),继续进行框架优化!这一版优化引入一个我们日常经常使用的操作库Boost,估算使用频率在70%以上! Boost的优势在哪 ...
- CLion之C++框架篇-优化开源框架,引入curl,实现get方式获取资源(四)
背景 结合上一篇CLion之C++框架篇-优化框架,引入boost(三),继续进行框架优化!在项目中,我们经常会通过get方式拉取第三方资源,这一版优化引入类库curl,用来拉取第三方资源库. ...
- linux下使用gtest框架进行c/c++单元测试
linux下使用gtest框架进行c/c++单元测试 前言 关于此次开发工具的选择,因为我最近尝试在linux下使用vim进行c/c++编程,且之前已经对vim进行了相关的配置,所以这里应作业要求直接 ...
- java基础之框架篇(1)
框架基础反射:反射是Java开发的一类动态相关机制.因为本身Java语言并不是一款动态语言,如果我们想要得到程序动态的效果,因此便引入了反射机制这一概念. 问题:Java中创建实例化对象有哪些方式? ...
- 滴滴Booster移动APP质量优化框架 学习之旅 三
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源 ...
- 第一篇web框架
第一篇web框架 http协议 web应用和web框架 主 文 http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维 ...
- [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法
一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...
- 滴滴 App 的质量优化框架 Booster,开源了!
一. 序 当 App 达到一定体量的时候,肯定是要考虑质量优化.有些小问题,看似只有 0.01% 触发率,但是如果发生在 DAU 过千万的产品中,就很严重了. 滴滴这个独角兽的 DAU 早已过千万,自 ...
- Spring Boot 揭秘与实战(三) 日志框架篇 - 如何快速集成日志系统
文章目录 1. 默认的日志框架 logback2. 常用的日志框架 log4j 1.1. 日志级别 1.2. 日志文件 3. 源代码 Java 有很多日志系统,例如,Java Util Logging ...
随机推荐
- ES查询-match VS match_phrase
我们以一个查询的示例开始,我们在student这个type中存储了一些学生的基本信息,我们分别使用match和match_phrase进行查询. 首先,使用match进行检索,关键字是“He is”: ...
- 微信支付遇到的坑---缺少参数total_fee
今天在做微信砍价成功后支付,出现了这个报错 看到报错后,去找total_fee这个参数,调试了半天,total_fee是确定有值的 微信支付的步骤 ① 预支付 商户号,商户秘钥,appid,appse ...
- EasyUI ComboGrid 笔记(支持分页)
业务要求: 下拉框做选择时需要展现多个字段供用户参考,由于内容可能会很多,故还需要考虑分页. 解决方案: 由于项目整体已经采用了EasyUI,在浏览了demo以后,初步考虑使用EasyUI的combo ...
- Quartz.Net进阶之六:详述 JobStores
一.介绍 今天开始学习 JobStore,别的先不说,也不用翻译软件来翻译,直接从字面意思看来理解一下.我第一眼的感觉就是 job 是任务的意思,Store 是商店的意思,连起来就是可以存储 Job ...
- 将EditPad Lite 加入鼠标右键
> 开始 > regedit 如图新建shell及command
- FPGA學習筆記(肆)--- Star Test Bench Template Writer
上一篇testbench我自己也沒怎麽搞懂,再來一篇學習特權同學的方法. 課程:Lesson 7 BJ EPM240学习板实验1——分频计数实验 鏈接:https://www.youtube.com/ ...
- Android自动化之Monkey测试(二)
本文主要从以下方面进行分享. 一.查看应用包名二.Monkey启动三.Monkey停止四.Monkey命令五.日志分析 一.查看应用包名 大多数时候,我们都是对特定的应用进行monkey测试,因此需要 ...
- SpringBoot放置在static下面的静态页面无法访问
最近写项目本来写的好好的,突然static的静态页面访问不了了. 于是我各种上网查资料,看大佬的解决方案,还是没有解决. 直到发现了这篇文章 https://blog.csdn.net/cmqwan/ ...
- Sublime Text Snippets(代码片段)功能
原文链接:http://www.bluesdream.com/blog/sublime-text-snippets-function.html 我们在编写代码的时候,总会遇到一些需要反复使用的代码片段 ...
- nodeJS接入微信公众平台开发
一.写在前面的话 Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...