Google Test單元測試使用

2021-05-25 06:52:02 字數 3354 閱讀 3488

google開源了很多實用的模組,比如google-gtest/google-gmock/google-glog/google-gflags/google-ctemplate/google-sparsehash/protobuf/perftools,gtest是c++的測試模組,提供豐富的測試方法

軟體單元測試常用的有cppunit, c++test,提供白盒功能的測試,gtest同樣是提供單元測試,諾西開源的robot framework測試,只是用來測configuration,運用在版本提交到測試部之前,每次rd人員提交到robot的時候,可以採用gtest來做自身完整測試,不僅測試配置,而且測試業務看收發包是否正常,下圖是乙個eci的測試簡圖

1、  gtest編譯

單執行緒除錯工程gtest.sln和多執行緒除錯工程gtest-md.sln,不同工程生成的lib也不同,路徑分別為gtest\msvc\gtest\debug\gtestd.lib, gtest\msvc\gtest-md\debug\gtestd.lib

debug和release不同編譯方式下,生成debug版本的gtest靜態庫(gtestd.lib)和release版本的gtest靜態庫(gtest.lib).

2、  寫gtest測試用例

header路徑:

lib路徑:

runtime library模式: 如果release版本,設為/mt,如果debug版本,設為/mtd

含有下面幾個測試用例

3、  測試用例:test******

這種用例最簡單,就是函式的測試,下面測試函式入參(4,10),(30,18),返回值為2和6

#include

int foop(inta, int b)

int c=a%b;

if(c==0)

returnfoop(b,c);

}test(fooptest,handlenonezeroinput)

{expect_eq(2, foop(4, 10));

expect_eq(6, foop(30, 18));

int main(intargc, char* argv)

{testing::initgoogletest(&argc, argv);

returnrun_all_tests();

4、  測試用例:testglobal

類似於初始化函式,下面例子是初始化corba,只在整個測試過程中執行一次。

class corbaenvironment: public testing::environment

public:

virtual void setup()

std::cout << " corbaenvironment  setup" << std::endl;

corba_init("127.0.0.1","7777");

virtual void teardown()

std::cout << " corbaenvironment  teardown" << std::endl;

int main(intargc, char* argv)

{testing::addglobaltestenvironment(newcorbaenvironment);

testing::initgoogletest(&argc, argv);

returnrun_all_tests();

5、  測試用例:testsuite

這種用例是testsuite方式,比如qinq業務的epl,evpl-uni2uni,evpl-uni2nni,evlan等等,每種業務就理解為乙個class,同一種業務發的不同測試報文為乙個function

1.setuptestcase() 方法在當前類第乙個case之前執行

2.teardowntestcase() 方法在當前類最後乙個case之後執行

/* simulate nms, configurate differnet vpn*/

class epl_ety2ety : public testing::test

protected:

static void setuptestcase()

/*create epl */

static void teardowntestcase()

/*delete epl */

/* simulate ixia, send different pkts */

test_f(epl_ety2ety,ety_untagpkts)

/*send untag packets */

test_f(epl_ety2ety,ety_pritagpkts)

/*send pritag packets */

test_f(epl_ety2ety,ety_tagpkts)

/*send tag packets */

int main(intargc, char* argv)

{testing::addglobaltestenvironment(new corbaenvironment);

testing::initgoogletest(&argc, argv);

return run_all_tests();

6、  測試用例:testcase

和testsuite不同的是,testcase對當前類所有case都執行,下面例子是用來處理mpls_ety2mplsnni,每個測試case都有動作

1. setup()方法在當前類每個case之前執行

2. teardown()方法在當前類每個case之後執行

class mpls_ety2mplsnni : publictesting::test

protected:

virtual void setup()

virtual void teardown()

test_f(mpls_ety2mplsnni, ety_untagpkts)

/*send untag packets */

int main(intargc, char* argv)

{testing::addglobaltestenvironment(new corbaenvironment);

testing::initgoogletest(&argc, argv);

returnrun_all_tests();

7、  測試用例:引數化

按照前面測試方法test******,foop需要複製很多個,利用引數化之後,就定義取值範圍即可,eci暫時沒用到

Qt使用Google Test 單元測試

場景 對qt程式測試 說明 google test環境搭建,看我部落格 google test 的使用,這裡不再重複說明。實現步驟 1 新增qt庫目錄,在qt的安裝目錄,我安裝的是在盤c下 專案屬性 c c 常規 附加包含目錄 新增路徑 c qt include c qt include qt c ...

用googletest寫單元測試

reference 對於稍微複雜些的測試用例,例如需要共享資料 class chashtabletest public testing test virtual void setup virtual void teardown chashtable ht string key1 string key...

單元測試 單元測試文章收藏

前言 前段時間公司計畫做自動化測試,自己也打算圍繞幾個點做相關調研,現在想想呢?其實對自動化測試的概念都還不是十分清晰,當時主要還是圍繞 單元測試 向qa小夥伴學習了一段時間,現由於公司重組,學習中斷,這裡簡單記錄一些單元測試好文,留待後續參考.什麼叫自動化測試?自動化測試覆蓋率?覆蓋率如何做到的?...