googletest進行單元測試(使用cmake編譯)

1、前提:

一、假定你的系統爲centos6系列ios

二、假定你已經安裝了基本的編譯環境,gcc,g++4.4.7git

三、假定你已經設置了環境變量:KDS_MOBILE_STOCK_HOMEgithub

四、假定你已經安裝了unzip解壓縮軟件,若未安裝,請安裝之:yum install zip unzipbootstrap

五、假定你已經安裝了vim,若未安裝可用vi代替vim命令vim

 

2、安裝cmake

一、下載源碼:http://www.cmake.org/files/v2.8/cmake-2.8.12.tar.gzcentos

二、解壓源碼目錄:tar –xzvf cmake-2.8.12.tar.gz函數

三、進入cmake-2.8.12目錄:cd cmake-2.8.12工具

四、編譯:測試

./bootstrapui

gmake

gmake install

 

3、安裝googletest

一、下載源碼:https://codeload.github.com/google/googletest/zip/release-1.8.0

二、解壓源碼:unzip googletest-release-1.8.0.zip

三、進入源碼目錄:cd googletest-release-1.8.0

四、建立並進入目錄build:mkdir build && cd build

五、編譯:cmake .. && make

六、將靜態庫拷貝至指定lib目錄:

cp googlemock/gtest/libgtest.a $KDS_MOBILE_STOCK_HOME/3rd-soft/lib/

cp googlemock/gtest/libgtest_main.a $KDS_MOBILE_STOCK_HOME/3rd-soft/lib/

七、將頭文件拷貝至指定include目錄:

cp -ri ../googletest/ $KDS_MOBILE_STOCK_HOME/3rd-soft/include/

mv $KDS_MOBILE_STOCK_HOME/3rd-soft/include/googletest $KDS_MOBILE_STOCK_HOME/3rd-soft/include/googletest1.8.0

 

4、創建演示工程

創建工程目錄:mkdir gtest_demo && cd gtest_demo

寫最外層CMakeLists.txt:vim CMakeLists.txt

# 工程名
set (PROJECT_NAME my-gtest)
PROJECT(${PROJECT_NAME})
SET(CMAKE_C_COMPILER "g++")  #選擇編譯器,默認是gcc

message("工程名: " ${PROJECT_NAME})
message("工程目錄: " ${PROJECT_SOURCE_DIR})
message("KDS_MOBILE_STOCK_HOME目錄: " $ENV{KDS_MOBILE_STOCK_HOME})

# 最低版本需求
cmake_minimum_required(VERSION 2.8)

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
set (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

message("編譯後可執行程序目錄: " ${EXECUTABLE_OUTPUT_PATH})
message("編譯後庫程序文件目錄: " ${LIBRARY_OUTPUT_PATH})

ADD_SUBDIRECTORY(src)
# ADD_SUBDIRECTORY(gtest) # 此處先註釋,緣由是一開始沒有測試工程

一)、寫源代碼工程

一、創建並進入源代碼目錄:mkdir src && cd src

二、完成源代碼文件編寫:

測試文件咱們寫兩個功能,一個爲計算模塊calc,實現Add功能,一個爲字符串模塊string_util,實現將字符串轉爲數字功能

1)、寫calc模塊頭文件:vim calc.h

# ifndef __KDS_CAlC_H_
# define __KDS_CALC_H_
class Calc
{
public:
    static int Add(int a, int b);
};
# endif

2)、寫calc模塊實現文件:vim calc.cpp

# include "calc.h"
int Calc::Add(int a, int b)
{
    return a+b;
}

3)、寫string工具模塊頭文件:vim string_util.h

# ifndef __KDS_STRING_UTIL_H_
# define __KDS_STRING_UTIL_H_
class StringUtil
{
public:
    static int ToInt(const char* str);
};
# endif

4)、寫string工具模塊實現文件:vim string_util.cpp

# include "stdlib.h"
# include "string_util.h"
int StringUtil::ToInt(const char * str)
{
    return atol(str);
}

5)、寫main函數:vim main.cpp

# include <iostream>
# include "calc.h"
# include "string_util.h"
int main()
{
    std::cout<<"3+5="<<Calc::Add(3, 5)<<std::endl;
    std::cout<<"ToInt(345)="<<StringUtil::ToInt("345")<<std::endl;
    return 0;
}

最後咱們須要將這5個文件編譯

三、寫編譯文件:vim CMakeLists.txt

# 打印當前目錄
message("源程序工程當前目錄: "  ${CMAKE_CURRENT_SOURCE_DIR})

# 頭文件目錄
INCLUDE_DIRECTORIES(
    $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/include
    /usr/local/include/
    /usr/include
)

AUX_SOURCE_DIRECTORY(. DIR_SRCS)
add_library(src ${DIR_SRCS})

add_executable(src_sult ${DIR_SRCS})

至此,源文件已經寫完。

四、驗證:

1)、返回上一層目錄,創建並進入一個臨時的build目錄:cd ../ && mkdir build && cd build

2)、編譯:cmake .. && make

此時能夠看到當前目錄下已經編譯好了src_sult文件,運行之

3)、運行:./src_sult

截圖以下:

image

 

二)、寫測試工程

一、退出src目錄:cd ..

二、創建並進入gtest測試工程目錄:mkdir gtest && cd gtest

三、寫測試calc代碼:vim test_calc.cpp

# include <gtest/gtest.h>
# include "src/calc.h"
using namespace std;

TEST(Test_Calc, Add)
{
    EXPECT_TRUE(Calc::Add(3,5)==8);
}

 

四、寫測試string_util代碼:vim test_string_util.cpp

# include <gtest/gtest.h>
# include "src/string_util.h"
using namespace std;

TEST(Test_StringUtil, ToInt)
{
    EXPECT_TRUE(StringUtil::ToInt("345")==345);
}

 

五、最後寫CMakeLists.txt文件:vim CMakeLists.txt

# 打印當前目錄
message("測試工程當前目錄: "  ${CMAKE_CURRENT_SOURCE_DIR})

# 需包含的頭文件
INCLUDE_DIRECTORIES(
    ${PROJECT_SOURCE_DIR}
    $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/include/googletest1.8.0/include
    /usr/local/include
    /usr/include
)

# 需包含的庫文件
link_directories(
    ${PROJECT_BINARY_DIR}/lib
    $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/lib
    /usr/local/lib
    /usr/lib
)

find_package(Threads)

AUX_SOURCE_DIRECTORY(. DIR_SRC_TESTS)
add_executable(test_sult ${DIR_SRC_TESTS})
TARGET_LINK_LIBRARIES(test_sult uuid gtest gtest_main libsrc.a)

TARGET_LINK_LIBRARIES(test_sult ${CMAKE_THREAD_LIBS_INIT})

 

3、改寫最外層CMakeLists.txt文件

一、回到上一層目錄:cd ..

記得前面最初的CMakeLists.txt中最後一行ADD_SUBDIRECTORY(gtest)被註釋了,把那個#去掉

image

二、改寫後最終的CMakeLists.txt文件:vim CMakeLists.txt

# 工程名
set (PROJECT_NAME my-gtest)
PROJECT(${PROJECT_NAME})
SET(CMAKE_C_COMPILER "g++")  #選擇編譯器,默認是gcc

message("工程名: " ${PROJECT_NAME})
message("工程目錄: " ${PROJECT_SOURCE_DIR})
message("KDS_MOBILE_STOCK_HOME目錄: " $ENV{KDS_MOBILE_STOCK_HOME})

# 最低版本需求
cmake_minimum_required(VERSION 2.8)

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
set (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

message("編譯後可執行程序目錄: " ${EXECUTABLE_OUTPUT_PATH})
message("編譯後庫程序文件目錄: " ${LIBRARY_OUTPUT_PATH})

ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(gtest)

 

四)運行測試

一、進入build目錄:cd build

二、編譯:cmake .. && make

此時看到當前目錄下已經生成了test_sult測試文件了

三、查看:ls

image

四、運行之:./test_sult

以下圖所示:

image

相關文章
相關標籤/搜索