背景
结合上一篇
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
详细代码:
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文件中的定义删除掉,如图:
5、运行部分样例,如图:
资源分享
优化后-框架代码: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/
转载文章受原作者版权保护。转载请注明原作者出处!