背景
結合上一篇
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
推薦
