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 命令,可以看到测试的执行结果。
[email protected]5437:~/gtest/googletest/make$ make && ./sample1_unittest g++ -isystem ../include -g -Wall -Wextra -pthread -c ../samples/sample1.ccg++ -isystem ../include -g -Wall -Wextra -pthread -c ../samples/sample1_unittest.ccg++ -isystem ../include -I.. -g -Wall -Wextra -pthread -c \ ../src/gtest-all.ccg++ -isystem ../include -I.. -g -Wall -Wextra -pthread -c \ ../src/gtest_main.ccar rv gtest_main.a gtest-all.o gtest_main.oar: creating gtest_main.aa - gtest-all.oa - gtest_main.og++ -isystem ../include -g -Wall -Wextra -pthread -lpthread sample1.o sample1_unittest.o gtest_main.a -o sample1_unittestRunning 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) [email protected] $^ %.o :%.cpp $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $< -o [email protected]
$(TESTS) : $(OBJS) gtest_main.a $(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o [email protected]
现在我们的文件夹有三个(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