查看文章 |
google开源测试框架的使用(二)
2008-07-12 15:40
上一篇简要介绍了测试框架的安装以及测试函数TEST的使用,这里介绍一下TEST_F的使用。TEST_F与TEST的区别是TEST_F提供了一个初始化函数(SetUp)和一个清理函数(TearDown),在TEST_F中使用的变量可以在初始化函数SetUp中初始化,在TearDown中销毁,并且所有的TEST_F是互相独立的,都是在初始化以后的状态开始运行,一个TEST_F不会影响另一个TEST_F所使用的数据,下面是一个例子。 需要测试的代码: A.h #ifndef A_H #define A_H class A { private: int _a; public: A( int a ); ~A( ); void add( int a ); int getA( ); }; #endif A.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 #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 */ 主函数(同上一个例子相同) main.cpp #include <gtest/gtest.h> int main(int argc, char * argv[]) { testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); return 0; } 编译后执行的结果如下: $ 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 |
最近读者: