下载链接为 https://github.com/google/googletest
目前最新的版本是v1.8.x,本文以这个为例子
将源码解压,进入gtest目录,可看到文件结构如下图所示:
GTEST提供了对于多个不同平台的支持,例如msvc文件夹是用在微软Visual Studio中,xcode文件夹是用于Mac Xcode,codegrear文件夹是用于Borland C++ Builder,在Linux环境中,我们用的内容就是make文件夹了
前一步我们讲到,很多文件是为了支持不同平台的,为了保持程序的简洁,我们需要删除不必要的文件,以防止混淆视听。删除之后,只剩下了4个文件夹,清爽多了。
打开sample文件夹,可看到一堆用于示范gtest用法的demo。
进入make文件夹,执行命令“make && ./sample1_unittest”,可看到执行结果:
root@smp-desktop:/mnt/share/Projects/googletest/make# make && ./sample1_unittest
g++ -isystem ../include -I.. -g -Wall -Wextra -pthread -std=c++11 -c \
../src/gtest-all.cc
ar rv libgtest.a gtest-all.o
ar: creating libgtest.a
a - gtest-all.o
g++ -isystem ../include -I.. -g -Wall -Wextra -pthread -std=c++11 -c \
../src/gtest_main.cc
ar rv libgtest_main.a gtest-all.o gtest_main.o
ar: creating libgtest_main.a
a - gtest-all.o
a - gtest_main.o
g++ -isystem ../include -g -Wall -Wextra -pthread -std=c++11 -c ../samples/sample1.cc
g++ -isystem ../include -g -Wall -Wextra -pthread -std=c++11 -c ../samples/sample1_unittest.cc
g++ -isystem ../include -g -Wall -Wextra -pthread -std=c++11 -L. -lgtest_main -lpthread sample1.o sample1_unittest.o libgtest.a libgtest_main.a -o sample1_unittest
Running main() from ../src/gtest_main.cc
[==========] Running 6 tests from 2 test suites.
[----------] 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 suites ran. (0 ms total)
[ PASSED ] 6 tests.
查看Makefile文件,可发现该文件只适用于编译第一个sample文件夹下的第一个sample,于是我们需要根据需要重写Makefile,为方便编写测试用例和执行编译的过程,我们把make文件夹删掉,在sample目录下创建Makefile文件,并重新编写Makefile。
埋彩蛋:以下Makefile文件中,包含了-fprofile-arcs 和-ftest-coverage这两个参数,是用于后一篇文章中的覆盖率统计。
GTEST_DIR = ..
USER_DIR = .
CPPFLAGS += -isystem $(GTEST_DIR)/include -std=c++11
CXXFLAGS += -g -Wall -Wextra -pthread -fprofile-arcs -ftest-coverage
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) $(CPPFLAGS) -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 $@
如上所示,我们可编译的源文件为.cpp结尾的,如果依然以sample测试为例子,则需要把sample1.cc的文件名改为sample1.cpp,把sample1_unittest.cc的文件名改为sample1_unittest.cpp,就大功告成了。
执行命令:make && ./run_test就能看到结果了。
将需要测试的.cpp、.h放入文件夹sample,编写测试文件的测试用例,建议以 被测源码_unitest.cpp为名字,如下图,需测试类pinyinfromutf8。
测试用例中,得包含头文件“gtest.h”才能调用单元测试需要的接口。
https://www.cnblogs.com/Jessica-jie/p/6705067.html Linux下Google Test (GTest)测试环境搭建步骤