0. 先决条件
Windows 上已安装 Cygwin,以便在Windows上编译运行C++代码。
1. 建立初始目录结构
E:\users\sharonmei1219-- gtestExample-- test-- Makefile
2. 准备测试文件,并编译
2.1 在test目录下新建一个空文件
E:\users\sharonmei1219-- gtestExample-- test-- testExample.cpp-- Makefile
2.2 修改Makefile
MakefileTARGET_DIR:= obj TEST_OBJ:= obj/testExample.o $(TEST_OBJ): $(TARGET_DIR) test/testExample.cpp $(CXX) -c test/testExample.cpp -o $(TEST_OBJ) $(TARGET_DIR): mkdir ./obj
2.3 验证,在gtestExample目录下执行make命令
3.1.2 执行make
>make
编译器报错: test/testExample.cpp:1:25: gtest/gtest.h: No such file or directory
3.2 安装google test
3.2.1 下载google test下载 gtest-1.6.0.zip
3.2.2 在sharonmei1219下建立unittest目录
E:\users\sharonmei1219-- gtestExample-- test-- Makefile-- unittest
3.2.3 解压 gtest-1.6.0.zip
E:\users\sharonmei1219-- gtestExample-- test-- Makefile-- unittest-- gtest-1.6.0
3.3 修改Makefile, 让编译器能找到google test的头文件
MakefileGTEST_DIR:= ../unittest/gtest-1.6.0 CPPFLAGS += -I$(GTEST_DIR)/include TARGET_DIR:= obj TEST_OBJ:= obj/testExample.o $(TEST_OBJ): $(TARGET_DIR) test/testExample.cpp $(CXX) -g $(CPPFLAGS) -c test/testExample.cpp -o $(TEST_OBJ) $(TARGET_DIR): mkdir ./obj
3.4 验证
在3.1.2中的编译错误不见了。
4. 第一个测试
4.1 在测试文件中写第一个测试用例
test/testExample.cpp#include "gtest/gtest.h" TEST(TestExample, FirstTest){ ASSERT_EQ(2, 1+3); }
4.2 修改Makefile
MakefileGTEST_DIR:= ../unittest/gtest-1.6.0 CPPFLAGS += -I$(GTEST_DIR)/include TARGET_DIR:= obj TEST_OBJ:= obj/testExample.o TARGET:= obj/unittest.exe</span> <span style="color:#ff0000;">$(TARGET): $(TEST_OBJ) $(CXX) $(TEST_OBJ) -o $(TARGET) $(TEST_OBJ): $(TARGET_DIR) test/testExample.cpp $(CXX) -g $(CPPFLAGS) -c test/testExample.cpp -o $(TEST_OBJ) $(TARGET_DIR): mkdir ./obj
4.3 编译
>make
编译器报错,很多的undefined reference to...,因为我们没有链接google test的库
4.4 链接google test
4.4.1 编译google test在E:\users\sharonmei1219\unittest\gtest-1.6.0\make 目录中执行 make
>make
会生成如下文件:gtest_main.a gtest-all.o sample1.o sample1_unittest.ogtest_main.o Makefile sample1_unittest.exe
4.4.2 打包
>mkdir ../lib >ar -rf ../lib/libgtest.a gtest-all.o gtest_main.o
4.5 修改Makefile回到 E:\users\sharonmei1219\gtestExample目录,修改Makefile
MakefileGTEST_DIR:= ../unittest/gtest-1.6.0 CPPFLAGS += -I$(GTEST_DIR)/include LD_LIBRARIES = -L $(GTEST_DIR)/lib -lgtest TARGET_DIR:= obj TEST_OBJ:= obj/testExample.o TARGET:= obj/unittest.exe $(TARGET): $(TEST_OBJ) $(CXX) $(TEST_OBJ) $(LD_LIBRARIES) -o $(TARGET) $(TEST_OBJ): $(TARGET_DIR) test/testExample.cpp $(CXX) -g $(CPPFLAGS) -c test/testExample.cpp -o $(TEST_OBJ) $(TARGET_DIR): mkdir ./obj
4.6 执行make
>make
检查obj文件中生成的unittest.exe
4.7 跑单元测试
>cd obj >./unittest.exe
检查结果,有一个测试用例失败,如我们所愿
Running main() from gtest_main.cc[==========] Running 1 test from 1 test case.[----------] Global test environment set-up.[----------] 1 test from TestExample[ RUN ] TestExample.FirstTesttest/testExample.cpp:4: FailureValue of: 1+3Actual: 4Expected: 2[ FAILED ] TestExample.FirstTest (0 ms)[----------] 1 test from TestExample (0 ms total)
[----------] Global test environment tear-down[==========] 1 test from 1 test case ran. (0 ms total)[ PASSED ] 0 tests.[ FAILED ] 1 test, listed below:[ FAILED ] TestExample.FirstTest
1 FAILED TEST
4.8 修改测试用例,让测试通过#include "gtest/gtest.h"
TEST(TestExample, FirstTest){ASSERT_EQ(4, 1+3);}