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!