gtest学习笔记一

make/for GNU make 编译gtest

基本概念 编写断言(判断一个条件是否是真)

一个测试程序可以包含很多测试用例

 

怎么写一个测试程序:

gTest用宏定义来调用函数。

ASSERT_EQ(x.size(),y.size())<<"Vectors x and y  are of unequal

length"

for(int i=0;i<x.size();i++)

{

EXPECT_EQ(x[i],y[i])<<"Vectors x and y differ at index "<<i;

}

 

简单测试

TEST(test_case_name,test_name){

...test body ...}

int Factorial(int n);

TEST(FactorialTest,HandlesZeroInput){

EXPECT_EQ(1,Factorial(0));

}

TEST(FactorialTest,HandlesPositiveInput){

EXPECT_EQ(1,Factorial(1));

EXPECT_EQ(2,Factorial(2));

EXPECT_EQ(6,Factorial(3));

EXPECT_EQ(40320,Factorial(8));}

 

用相同的数据做多种测试用 Test Fixtures

创建一个fixture,

1 从::testing::Test继承来, 正文以protected: 或者 public:

2 类中定义你想用的对象

3 定义一个 SetUp()函数来初始化各对象

4 定义一个TearDown()来释放所有资源

5 如果需要的话,定义子程序

 

TEST_F代替TEST 可以让你接近对象和子程序

 

作为一个例子,我们来写一下FIFO的测试程序

 

template<typename  E>

class Queue{

  public:

    Queue();

    void Enqueue(const E& element);

    E* Dequeue();

    size_t size() const;

}

定义一个fixture class,名字为QueueTest

class QueueTest:public ::testing::Test{

  protected:

    virtual void SetUp(){

    q1_.Enqueue(1);

    q2_.Enqueue(2);

    q3_.Enqueue(3);

    }

   //virtual void TearDown(){}

    Queue<int> q0_;

    Queue<int> q1_;

  Queue<int> q2_; 

};

 TearDown不需要,我们没有要清理的东西

TEST_F(QueueTest,IsEmptyInitially){

  EXPECT_EQ(0,q0_size());

}

TEST_F(QueueTest,DequeueWorks){
 
int* n = q0_.Dequeue();
  EXPECT_EQ
(NULL, n);

  n
= q1_.Dequeue();
  ASSERT_TRUE
(n != NULL);
  EXPECT_EQ
(1,*n);
  EXPECT_EQ
(0, q1_.size());
 
delete n;

  n
= q2_.Dequeue();
  ASSERT_TRUE
(n != NULL);
  EXPECT_EQ
(2,*n);
  EXPECT_EQ
(1, q2_.size());
 
delete n;
}

对特定程序进行测试gtest!

posted @ 2011-12-14 11:35  张兰云  阅读(463)  评论(0编辑  收藏  举报