gtest中,TEST_F与TEST的区别

来源:互联网 发布:网络施工资质要求 编辑:程序博客网 时间:2024/04/29 05:03

         TEST_F与TEST的区别是,TEST_F提供了一个初始化函数(SetUp)和一个清理函数(TearDown),在TEST_F中使用的变量可以在初始化函数SetUp中初始化,在TearDown中销毁,并且所有的TEST_F是互相独立的,都是在初始化以后的状态开始运行,一个TEST_F不会影响另一个TEST_F所使用的数据,下面是一个例子。

  需要测试的代码:

[cpp] view plaincopyprint?
  1. //A.h   
  2. #ifndef A_H   
  3. #define A_H   
  4. class A  
  5. {  
  6. private:  
  7.   int _a;  
  8. public:  
  9.   A( int a );  
  10.   ~A( );  
  11.   void add( int a );  
  12.   int getA( );  
  13. };  
  14. #endif   
  15. A.cpp  
  16. #include "A.h"   
  17. A::A( int a ){  
  18.   this->_a = a;  
  19. }  
  20. A::~A( ){  
  21. }  
  22. void A::add( int a ){  
  23.   this->_a += a;  
  24. }  
  25. int A::getA( ){  
  26.   return this->_a;  
  27. }  
//A.h#ifndef A_H#define A_Hclass A{private:  int _a;public:  A( int a );  ~A( );  void add( int a );  int getA( );};#endifA.cpp#include "A.h"A::A( int a ){  this->_a = a;}A::~A( ){}void A::add( int a ){  this->_a += a;}int A::getA( ){  return this->_a;}


  测试代码:

  A_test.cpp

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "A.h"
#include <gtest/gtest.h>
class A_test : public testing::Test {
protected:
  A* _p_a;
  virtual void SetUp( ){   //初始化函数
    this->_p_a = new A( 1 );
  }
  virtual void TearDown( ){  //清理函数
    delete this->_p_a;
  }
};
//第一个测试,参数A_test是上面的那个类,第二个参数FirstAdd是测试名称
TEST_F( A_test,FirstAdd ){    
  EXPECT_EQ( 1,_p_a->getA( ) );
  _p_a->add( 3 );
  EXPECT_EQ( 4,_p_a->getA( ) );
}
//第二个测试
TEST_F( A_test,SecondAdd ){
  EXPECT_EQ( 1,_p_a->getA( ) );
  _p_a->add( 5 );
  EXPECT_EQ( 6,_p_a->getA( ) );
}
/*
上面的两个测试都是在SetUp函数执行后的状态下执行,也就是说在执行任意一个TEST_F时 _p_a->_a 的值都是初始值1
*/

  主函数(同上一个例子相同)

双击代码全选
1
2
3
4
5
6
7
8
main.cpp
#include <gtest/gtest.h>
int main(int argc, char * argv[])
{
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
  return 0;
}

  编译后执行的结果如下:

双击代码全选
1
2
3
4
5
6
7
8
9
10
11
12
13
$ gtester main
TEST: main... (pid=13965)
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from A_test
[ RUN   ] A_test.FirstAdd
[    OK ] A_test.FirstAdd
[ RUN   ] A_test.SecondAdd
[    OK ] A_test.SecondAdd
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran.
[ PASSED ] 2 tests.
PASS: main

 

(本文出自:http://tech.ddvip.com/2009-02/1234225491107952.html)