GTest是Google开发的跨平台而且开源的C++单元测试框架,很好很强大。
下载地址: 。
关于GTest在Windows下使用,CoderZh给出了十分详尽的使用指南: 。
我的工作环境:Ubuntu12.04, python 2.7, Makefile,SVN等
一、下载gtest文件 我用的是svn下载的。
svn checkout gtest-svn
得到最新版的gtest,成功可以看到文件夹gtest-svn。
二、生成gtest静态库 先进入文件夹:
$cd gtest-svn
编译生成gtest-all.o文件(注意-I后无空格):
$g++ -I./include -I./ -c ./src/gtest-all.cc
再生成.a静态库文件:
$ ar -rv libgtest.a gtest-all.o
若成功,会在当前目录下生成libgtest.a库。可拷贝它到C++单元测试项目中去,以便使用。
三、编写简单功能函数 新建一个项目(目录)GTestApp,包含两个代码文件: functions.h, functions.cpp。 实现两个int变量的加减乘除功能。
//functions.h #ifndef _FUNCTIONS_H #define _FUNCTIONS_H
int add(int one,int two); int myMinus(int one,int two); int multiply(int one,int two); int divide(int one,int two); #endif //functions.cpp #include "functions.h" int add(int one,int two){ return one+two; } int myMinus(int one,int two){ return one-two; } int multiply(int one,int two){ return one*two; } int divide(int one,int two){ return one/two; } 四、编写单元测试代码 1、编写单元测试代码functionsTest.cpp
//functionsTest.cpp #include "gtest/gtest.h" #include "functions.h"
TEST(AddTest,AddTestCase){ ASSERT_EQ(2,add(1,1)); } TEST(MinusTest,MinusTestCase){ ASSERT_EQ(10,myMinus(25,15)); } TEST(MultiplyTest,MutilplyTestCase){ ASSERT_EQ(12,multiply(3,4)); } TEST(DivideTest,DivideTestCase){ ASSERT_EQ(2,divide(7,3)); } 2、编写测试代码TestAll.cpp
//TestAll.cpp #include "gtest/gtest.h" #include <iostream> using namespace std;
int main(int argc,char* argv[]) { //testing::GTEST_FLAG(output) = "xml:"; //若要生成xml结果文件 testing::InitGoogleTest(&argc,argv); //初始化 RUN_ALL_TESTS(); //跑单元测试 return 0; } 五、编译与运行测试 1、编译
- 复制gtest库文件
在GTestApp目录下新建lib目录,并复制libgtest.a到其中。
$mkdir lib
$cp <the path>/libgtest.a lib
- 复制gtest头文件
gtest1.6.0目录下的include包含了需使用到的头文件。把include复制到GTestApp中来。
3)编译和链接
$ g++ -o functions.o -c functions.cpp
$ g++ -o functionsTest.o -c funciontsTest.cpp -I./include
$ g++ -o TestAll.o -c TestAll.cpp -I./include
链接:
$ g++ -o main *.o -I./include -L./lib -lgtest -lpthread #注意不是-libgtest,同时需要用到 libpthread这个库
最后可以得到一个main的可执行文件
2、运行与测试
$./main
[==========] Running 4 tests from 4 test cases. [----------] Global test environment set-up. [----------] 1 test from AddTest [ RUN ] AddTest.AddTestCase [ OK ] AddTest.AddTestCase (0 ms) [----------] 1 test from AddTest (1 ms total)
[----------] 1 test from MinusTest [ RUN ] MinusTest.MinusTestCase [ OK ] MinusTest.MinusTestCase (0 ms) [----------] 1 test from MinusTest (0 ms total)
[----------] 1 test from MultiplyTest [ RUN ] MultiplyTest.MultiplyTestCase [ OK ] MultiplyTest.MultiplyTestCase (0 ms) [----------] 1 test from MultiplyTest (1 ms total)
[----------] 1 test from DivideTest [ RUN ] DivideTest.DivideTestCase [ OK ] DivideTest.DivideTestCase (0 ms) [----------] 1 test from DivideTest (3 ms total)
[----------] Global test environment tear-down [==========] 4 tests from 4 test cases ran. (8 ms total) [ PASSED ] 4 tests.
如果需要得到xml文件的话,可以这么做
首先先在main函数打开生成函数
testing::GTEST_FLAG(output) = "xml:";
再重新编译,生成main可执行文件。再执行下面操作。 $ ./main --gtest_output=xml
[==========] Running 4 tests from 4 test cases. [----------] Global test environment set-up. [----------] 1 test from AddTest [ RUN ] AddTest.AddTestCase [ OK ] AddTest.AddTestCase (0 ms) [----------] 1 test from AddTest (1 ms total)
[----------] 1 test from MinusTest [ RUN ] MinusTest.MinusTestCase [ OK ] MinusTest.MinusTestCase (0 ms) [----------] 1 test from MinusTest (1 ms total)
[----------] 1 test from MultiplyTest [ RUN ] MultiplyTest.MultiplyTestCase [ OK ] MultiplyTest.MultiplyTestCase (0 ms) [----------] 1 test from MultiplyTest (1 ms total)
[----------] 1 test from DivideTest [ RUN ] DivideTest.DivideTestCase [ OK ] DivideTest.DivideTestCase (0 ms) [----------] 1 test from DivideTest (0 ms total)
[----------] Global test environment tear-down [==========] 4 tests from 4 test cases ran. (4 ms total) [ PASSED ] 4 tests.
让我们再看下当前目录,用ls命令:可以看到有一个main.xml的文件,大功告成。
本文参考: