gtest的安装和测试[good]

1、前言

本篇将介绍一些gtest的基本使用,包括下载,安装,编译,创建咱们第一个测试Demo工程,以及编写一个最简单的测试案例。 html

2、下载

若是不记得网址, 直接在google里搜gtest,第一个就是。目前gtest的最新版本为1.3.0,从下列地址能够下载到该最新版本:spring

http://googletest.googlecode.com/files/gtest-1.3.0.zip 框架

http://googletest.googlecode.com/files/gtest-1.3.0.tar.gz 函数

http://googletest.googlecode.com/files/gtest-1.3.0.tar.bz2 单元测试

3、编译

下载解压后, 里面有个msvc目录:测试

 

使用VS的同窗能够直接打开msvc里面的工程文件, 若是你在使用的是VS2005或是VS2008,打开后会提示你升级,升完级后,咱们直接编译里面的“gtest”工程,能够直接编过的。ui

这里要提醒一下的是,若是你升级为VS2008的工程,那么你的测试Demo最好也是VS2008工程,否则你会发现很郁闷,你的Demo怎么也编不过,我也曾折腾了很久,当时我升级为了VS2008工程,结果我使用VS2005工程建Demo,死活编不过。(这里有人误解了,并非说只能在VS2008中编译,在VS2005中一样能够。若是要编译VS2005版本,最好保证gtest和你的测试工程都使用VS2005工程。)google

编译以后,在msvc里面的Debug或是Release目录里看到编译出来的gtestd.lib或是gtest.lib文件。spa

4、第一个Demo

下面咱们开始创建咱们的第一个Demo了,假如以前使用的VS2008编译的gtest,那么,咱们在VS2008中,新建一个Win32 Console Application。接着就是设置工程属性,总结以下:命令行

1.设置gtest头文件路径

2.设置gtest.lib路径

3.Runtime Library设置

 

若是是Release版本,Runtime Library设为/MT。固然,其实你也能够选择动态连接(/MD),前提是你以前编译的gtest也使用了一样是/MD选项。

工程设置后了后,咱们来编写一个最简单测试案例试试,咱们先来写一个被测试函数:

复制代码
int  Foo( int  a,  int  b)
{
    
if  (a  ==   0   ||  b  ==   0 )
    {
        
throw   " don't do that " ;
    }
    
int  c  =  a  %  b;
    
if  (c  ==   0 )
        
return  b;
    
return  Foo(b, c);
}
复制代码

 

没错,上面的函数是用来求最大公约数的。下面咱们就来编写一个简单的测试案例。

复制代码
#include  < gtest / gtest.h >

TEST(FooTest, HandleNoneZeroInput)
{
    EXPECT_EQ(
2 , Foo( 4 10 ));
    EXPECT_EQ(
6 , Foo( 30 18 ));
}
复制代码

 

上面能够看到,编写一个测试案例是多么的简单。 咱们使用了TEST这个宏,它有两个参数,官方的对这两个参数的解释为:[TestCaseName,TestName],而我对这两个参数的定义是:[TestSuiteName,TestCaseName],在下一篇咱们再来看为何这样定义。

对检查点的检查,咱们上面使用到了EXPECT_EQ这个宏,这个宏用来比较两个数字是否相等。Google还包装了一系列EXPECT_* 和ASSERT_*的宏,而EXPECT系列和ASSERT系列的区别是:

    1. EXPECT_*  失败时,案例继续往下执行。

    2. ASSERT_* 失败时,直接在当前函数中返回,当前函数中ASSERT_*后面的语句将不会执行。 

在下一篇,咱们再来具体讨论这些断言宏。为了让咱们的案例运行起来,咱们还须要在main函数中添加以下代码:

int  _tmain( int  argc, _TCHAR *  argv[])
{
    testing::InitGoogleTest(
& argc, argv);
    
return  RUN_ALL_TESTS();
}

 

“testing::InitGoogleTest(&argc, argv);” :gtest的测试案例容许接收一系列的命令行参数,所以,咱们将命令行参数传递给gtest,进行一些初始化操做。gtest的命令行参数很是丰富,在后面咱们也会详细了解到。

“RUN_ALL_TESTS()” :运行全部测试案例

OK,一切就绪了,咱们直接运行案例试试(一片绿色,很是爽):

 

5、总结

本篇内容确实是很是的初级,目的是让历来没有接触过gtest的同窗了解gtest最基本的使用。gtest还有不少更高级的使用方法,咱们将会在后面讨论。总结本篇的内容的话:

    1. 使用VS编译gtest.lib文件

    2. 设置测试工程的属性(头文件,lib文件,/MT参数(和编译gtest时使用同样的参数就好了))

    3. 使用TEST宏开始一个测试案例,使用EXPECT_*,ASSER_*系列设置检查点。

    4. 在Main函数中初始化环境,再使用RUN_ALL_TEST()宏运行测试案例。

优势:

    1. 咱们的测试案例自己就是一个exe工程,编译以后能够直接运行,很是的方便。

    2. 编写测试案例变的很是简单(使用一些简单的宏如TEST),让咱们将更多精力花在案例的设计和编写上。

    3. 提供了强大丰富的断言的宏,用于对各类不一样检查点的检查。

    4. 提升了丰富的命令行参数对案例运行进行一系列的设置。

系列连接:

1.玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

2.玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

3.玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制

4.玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化

5.玩转Google开源C++单元测试框架Google Test系列(gtest)之五 - 死亡测试 

6.玩转Google开源C++单元测试框架Google Test系列(gtest)之六 - 运行参数

7.玩转Google开源C++单元测试框架Google Test系列(gtest)之七 - 深刻解析gtest

8.玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造本身的单元测试框架

相关文章
相关标签/搜索