Linux下GoogleTest(GTest)测试环境搭建步骤
1.下载GTEST
⽬前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 ../
g++ -isystem ../include -g -Wall -Wextra -pthread -c ../samples/
g++ -isystem ../include -I.. -g -Wall -Wextra -pthread -c \
../
g++ -isystem ../include -I.. -g -Wall -Wextra -pthread -c \
.
./src/
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
[==========] 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
makefile phony[==========] 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.cpp,把的⽂件名改为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)/
gtest_main.o : $(GTEST_SRCS_)
$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
$(GTEST_DIR)/src/
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.添加⾃⼰的测试函数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论