Linux下Google Test (GTest)測試環境搭建步驟


1.下載GTEST

下載鏈接為:https://code.google.com/p/googletest/downloads/list

目前GTEST的最新版本為gtest-1.7.0.zip,因此我們在本文中將以這個版本作為例子講解。

2.認識文件夾

下載並解壓之后,就可以看到gooletest(gtest-1.7.0)文件夾了,里面的內容如下圖所示:

這么多文件看起來很麻煩。其實,GTEST提供了對於多個不同平台的支持,例如msvc文件夾是用在微軟Visual Studio中,xcode文件夾是用於Mac Xcode,codegrear文件夾是用於Borland C++ Builder,在Linux環境中,我們用的內容就是make文件夾了。

3.清除不需要的文件

前一步中我們已經講到,很多文件是為了支持不同平台的,為了保持程序的簡潔,避免混淆試聽,我們在這一步把所有不需要的文件全部刪除,只保留我們需要的。

只剩下了四個文件夾,看上去好多了。其實打開make文件夾,你會發現里面只有一個Makefile文件。查看Makefile文件內容,得知這是系統給出的編譯samples文件夾中的第一個sample的命令。但是打開sample文件夾,又看到里面一大坨源文件。在本入門教程中,我們先不考慮那些復雜的例子。因此,打開samples文件夾,開始刪文件,刪到只剩下如圖所示的三個文件為止。

4.改寫Makefile文件

到make文件夾下,通過命令行執行 $ make && ./sample1_unittest 命令,可以看到測試的執行結果。

wj@wj-Inspiron-5437:~/gtest/googletest/make$ make && ./sample1_unittest

g++ -isystem ../include -g -Wall -Wextra -pthread -c ../samples/sample1.cc
g++ -isystem ../include -g -Wall -Wextra -pthread -c ../samples/sample1_unittest.cc
g++ -isystem ../include -I.. -g -Wall -Wextra -pthread -c \
            ../src/gtest-all.cc
g++ -isystem ../include -I.. -g -Wall -Wextra -pthread -c \
            ../src/gtest_main.cc
ar rv gtest_main.a gtest-all.o gtest_main.o
ar: creating gtest_main.a
a - gtest-all.o
a - gtest_main.o
g++ -isystem ../include -g -Wall -Wextra -pthread -lpthread sample1.o sample1_unittest.o gtest_main.a -o sample1_unittest
Running main() from gtest_main.cc
[==========] Running 6 tests from 2 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN      ] FactorialTest.Negative
[       OK ] FactorialTest.Negative (0 ms)
[ RUN      ] FactorialTest.Zero
[       OK ] FactorialTest.Zero (0 ms)
[ RUN      ] FactorialTest.Positive
[       OK ] FactorialTest.Positive (0 ms)
[----------] 3 tests from FactorialTest (0 ms total)

[----------] 3 tests from IsPrimeTest
[ RUN      ] IsPrimeTest.Negative
[       OK ] IsPrimeTest.Negative (0 ms)
[ RUN      ] IsPrimeTest.Trivial
[       OK ] IsPrimeTest.Trivial (0 ms)
[ RUN      ] IsPrimeTest.Positive
[       OK ] IsPrimeTest.Positive (0 ms)
[----------] 3 tests from IsPrimeTest (0 ms total)

[----------] Global test environment tear-down
[==========] 6 tests from 2 test cases ran. (0 ms total)
[  PASSED  ] 6 tests.



不過如果打開Makefile查看一下,就會發現這個makefile只適用於編譯sample1,如果我再增加一個被測的源文件呢?又要重新寫makefile,太麻煩了。於是,在這一步,我們改寫一下Makefile。

 上一步我們講到,現在只剩下4個文件夾(include,make,samples,src),既然make里面的唯一一個文件也要被改寫,那也沒必要留這個文件夾了。於是,你要做的第一件事情就是,把make文件夾,連同里面的Makefile文件全部刪除……然后,進入samples文件夾,自己創建一個文件,名為Makefile,如圖所示

然后,打開Makefile文件,寫入以下內容。這個新的Makefile是由剛才被我們刪除的Makefile改寫而來的,如果你好奇的話可以比較一下它們之間的差別,里面涉及到一些makefile的語法和函數,如果不熟的話,你可能需要花費幾分鍾查一下資料去了解他們。

注意下圖中改寫的Makefile第32行,我們編譯的是后綴名為cpp的文件,而原來給的例子卻以cc結尾。因此,你還要做一件事情,就是把sample1.cc的文件名改為sample1.cpp,把sample1_unittest.cc的文件名改為sample1_unittest.cpp,就大功告成了。

GTEST_DIR = ..
USER_DIR = .
CPPFLAGS += -isystem $(GTEST_DIR)/include
CXXFLAGS += -g -Wall -Wextra -pthread
TESTS = run_test
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
                $(GTEST_DIR)/include/gtest/internal/*.h
FILES =$(foreach d,$(USER_DIR),$(wildcard $(d)/*.cpp))
OBJS =$(patsubst %.cpp,%.o,$(FILES))


all : $(TESTS) clean : rm -f $(TESTS) gtest_main.a *.o

.PHONY :clean
GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS) gtest-all.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest-all.cc gtest_main.o : $(GTEST_SRCS_) $(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \ $(GTEST_DIR)/src/gtest_main.cc gtest_main.a : gtest-all.o gtest_main.o $(AR) $(ARFLAGS) $@ $^

%.o :%.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o $@

$(TESTS) : $(OBJS) gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@

現在我們的文件夾有三個(include,src,samples),我們自己被測的程序放在samples文件夾中。這個文件夾的名字看着也比較不爽,你可以把它改為mycode或者testcode,然后GTEST根目錄的文件夾名稱gtest-1.7.0也可以改為mygtest之類,。如圖所示:

 

現在,進入命令行進行編譯執行操作: $ make && ./run_test,就可以看到結果了,如圖所示:

6.添加自己的測試函數

參考http://www.linuxidc.com/Linux/2015-05/116894.htm

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM