gtest测试框架,搭建参考 :https://www.linuxidc.com/Linux/2015-05/116894.htm
1. gtest代码下载: https://codeload.github.com/google/googletest/tar.gz/release-1.8.0
2.进入 googletest-1.8.0/googletest/, 删除不需要的文件,完成后:
makefile:
#https://www.linuxidc.com/Linux/2015-05/116894.htm
GTEST_DIR = .
USER_DIR = ./samples
CPPFLAGS += -isystem $(GTEST_DIR)/include
CXXFLAGS += -g -Wall -Wextra -pthread
TESTS = run_test
FILES = $(foreach d, $(USER_DIR), $(wildcard $(d)/*.cpp))
OBJS = $(patsubst %.cpp, %.o, $(FILES))
# All Google Test headers. Usually you shouldn't change this
# definition.
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
$(GTEST_DIR)/include/gtest/internal/*.h
all : $(TESTS) gtest.a
clean :
rm -f $(TESTS) gtest.a gtest_main.a *.o $(USER_DIR)/*.o
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.a : gtest-all.o
$(AR) $(ARFLAGS) $@ $^
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 $@
sample目录下只保留sample1*文件,完成后make得到gtest.a和gtest_main.a和testbin。
gtest.a是不带main函数的库,需要自己写用于测试的 main.cpp,gtest_main.a使用src目录下的main函数,自己代码中只需要写个TEST()单元测试文件。
3.然后假使我们的代码在~/mycode/目录下,包含abc.c和abc.cpp。那么我们可以写TEST()单元测试文件 test_abc.cpp 测试abc接口,然后在gtest目录下将上面makefile中USER_DIR指定到~/mycode/,即可编译运行测试。
或者我们在~/mycode/目录下, 除了写 TEST() 单元测试文件test_abc.cpp 外,再写一个main.cpp(仿照 src/gtest_main.cpp)负责运行gtest框架,然后make(makefile如下)
MODULE_BIN = main_test
MODULE_OBJS += $(patsubst %.cpp,%.o ,$(wildcard ./*.cpp))
#MODULE_SRCS = $(shell find . -name "*.cpp")
#MODULE_OBJS += $(patsubst %.cpp,%.o ,$(MODULE_SRCS))
CC = g++
OUT_DIR = .
PUBLIC_FLAGS:=-g -O0 -Wall
LDFLAGS = -lm -lz -lpthread
MODULE_INCLUDE = -I.
MODULE_INCLUDE += -I../googletest-release-1.8.0/googletest/include
%.o: %.cpp
$(CC) $(PUBLIC_FLAGS) $(MODULE_INCLUDE) -c $< -o $@
all : clean $(MODULE_OBJS)
$(CC) $(MODULE_OBJS) ../googletest-release-1.8.0/googletest/gtest.a $(PUBLIC_FLAGS) $(LDFLAGS) -o $(OUT_DIR)/$(MODULE_BIN)
clean:
-rm -f $(OUT_DIR)/$(MODULE_BIN)
-rm -f $(MODULE_OBJS)
4.开始测试,./main_test --gtest_list_tests, ./main_test --gtest_filter=xxx.xxx
后续学习可以参考这个 https://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html