gtest的Linux使用(Google test)

GTest是Google开发的跨平台而且开源的C++单元测试框架,很好很强大。

下载地址:https://code.google.com/p/googletest/ 。

关于GTest在Windows下使用,CoderZh给出了十分详尽的使用指南:http://www.cnblogs.com/coderzh/archive/2009/04/06/1426755.html 。

我的工作环境:Ubuntu12.04, python 2.7, Makefile,SVN等

一、下载gtest文件
我用的是svn下载的。

svn checkout http://googletest.googlecode.com/svn/trunk/ 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

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、编译

1) 复制gtest库文件

在GTestApp目录下新建lib目录,并复制libgtest.a到其中。

$mkdir lib

$cp /libgtest.a lib

2) 复制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的文件,大功告成。

本文参考:

http://graybull.is-programmer.com/posts/37871.html

http://www.cnblogs.com/coderzh/archive/2009/03/31/1426758.html

https://code.google.com/p/googletest/

你可能感兴趣的:(gtest的Linux使用(Google test))