测试——Gtest
GoogleTest——Google C++單元測試框架(跨平臺)
- gtest是開源工程的測試框架,不止針對特定的平臺,使用的范圍比較大,所以gtest的復(fù)用性和可移植性好。
- 單元測試一般由測試人員完成,目的是隔離程序部件,并證明這個單個部件滿足預(yù)期 的功能
- 提供了豐富的斷言、致命和非致命失敗判斷,能進行值參數(shù)化測試、類型參數(shù)化測試、“死亡測試;
- 可以自動發(fā)現(xiàn)測試,斷言集,用戶定義的斷言,death測試,知名與非致命的失敗,類型參數(shù)化測試,各類運行測試的選項和XML的測試報告。
?
/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; }//test_A.cpp#include "A.h" #include <gtest/gtest.h>class A_test:public testing::Test{ protected:A* _p_a;//初始化函數(shù)virtual void SetUp(){this->_p_a = new A(1);}//清理函數(shù)virtual void TearDown(){delete this->_p_a;} };//第一個測試,參數(shù)A_test是上面的類, //第二個參數(shù)FirstAdd是測試名稱 TEST_F(A_test,FirstAdd){EXPECT_EQ(1,_p_a->getA());_p_a->add(3);EXPECT_EQ(1,_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函數(shù)執(zhí)行后的狀態(tài)下執(zhí)行, // 也就是說在執(zhí)行任意一個TEST_F時 _p_a->_a的值都是初始值int main(int argc,char*argv[]){testing::InitGoogleTest(&argc,argv);return RUN_ALL_TESTS(); }?
####Makefiletest:test_A.o A.og++ -g test_A.o A.o -o test \-I./gtest-1.8.0/include \-L./gtest-1.8.0/lib -lgtest -lgtest_main -lpthreadtest_A.o:test_A.cppg++ -g -c test_A.cpp -o test_A.o A.o:A.cppg++ -g -c A.cpp -o A.o.PHONY:clean clean:rm test由結(jié)果可以看出,第一個測試點firstAdd是出現(xiàn)問題的,我們就在出錯的地方更改就可以解決問題。
這里的EXPECT_EQ是在比較傳入數(shù)據(jù)是否相等,不等就是失敗的返回。
同理,還有很多斷言方法。
布爾類型檢查
- ?? ??? ?ASSERT_TRUE(condition)
- ?? ??? ?ASSERT_FALSE(condition)
數(shù)值類型檢查
- ?? ??? ?ASSERT_EQ(expected,actual);
- ?? ??? ?ASSERT_NE(val1,val2);
- ?? ??? ?ASSERT_LT(val1, val2);
- ?? ??? ?ASSERT_LE(val1, val2);
- ?? ??? ?ASSERT_GT(val1, val2);
- ?? ??? ?ASSERT_GE(val1, val2);
?字符串檢查
?
- ?? ??? ?ASSERT_STREQ(expected_str, actual_str);
- ?? ??? ?ASSERT_STRNE(str1, str2);
- ?? ??? ?ASSERT_STRCASEEQ(expected_str, actual_str);
- ?? ??? ?ASSERT_STRCASENE(str1, str2);
?
?
總結(jié)
- 上一篇: 7款安全测试自动化工具推荐!
- 下一篇: 教育——教学管理平台