小試Googletest記二

2021-07-27 13:35:42 字數 1517 閱讀 7947

學習了gtest的一些基礎知識後進入了玩轉google開源c++單元測試框架google test系列(gtest)之四 - 引數化,引數化的測試在平時的應用中應該也比較常見,原博主介紹的例子非常簡潔,琢磨著怎樣根據自己的需要定製引數,而不是簡單的使用基本變數(int之類的),就拿原博主之前用的foo函式(計算最大公約數的例子)測試舉例,如果要引數化測試一組資料該怎麼做,學習了一些資料找到的方案:

1. 宣告我們定製的引數結構,並定義我們要的測試案例陣列;

struct test_case

;test_case inputs[5];

2.此時的inputs[5]是全域性變數,可以在定義時便將其初始化,但很多情況要使用迴圈初始化,因此這裡我們採用迴圈初始化,增加我們自己寫的函式 caseinit()

void caseinit()

}

值得注意的是,此時我們將面臨乙個問題,就是caseinit()函式必須在input被使用前被執行以保證input被成功初始化,最簡單的方法就是在main函式的第一行便呼叫caseinit()。為了乙個測試案例修改main函式的寫法總是顯得有些不妥,不過想想將caseinit()作為所有測試資料的初始化函式也不錯,如果以後發現更好的方法再補充上來吧,繼續~

3.我們的初始化測試資料的任務已經完成了,接下來執行兩個重要步驟:

3.1  新增類

class multitest : public::testing::testwithparam;
其中multitest是本測試案例的名字,當然可以自己隨意取名,但接下來都需要用到這個名字

3.2 初始化測試函式   

instantiate_test_case_p(demo,multitest,::testing::valuesin(inputs));
第乙個引數是測試案例的字首,可以任意取。 

第二個引數是測試案例的名稱,需要和之前定義的引數化的類的名稱相同,如此處的multitest

第三個引數是可以理解為引數生成器,上面的例子使用test::valuesin表示使用inputs陣列內的元素。

4.最後一步當然是書寫我們的測試case:

test_p(multitest,test1)

至此就大功告成了,結果長這樣:

到這裡,單個引數化的測試案例就算完整了,如果要寫多組引數化的測試怎麼辦?只在上述方法的基礎上再新增test_p巨集是不行,因為乙個唯一的名字標示了乙個測試案例(上例中的multitest),而乙個測試案例唯一繫結了乙個繼承類和資料來源(見步驟3中的操作)。因此如果要寫多組測試案例的話,需要依次執行上述步驟:建立資料陣列,繫結繼承類,初始化函式(繫結資料來源),實現test_p函式。同時必須保證新的案例有另乙個唯一的名字,當然新的資料陣列依然可以放在上例中的caseinit函式中。

jasper 小試牛刀 (二) 製作心得

上次寫完後,就進入了乙個緊張的報表整合,現在就把前段時間遇到的一些問題以及心得和大家分享一下 一 生成的報表有部分內容顯示不出來 a.在製作的時候放大些 比如放大3倍等等 這樣可以很清晰的看到單元格邊緣有沒有重疊 b.在使用frame的時候,就是加邊框,要注意內外包裹的順序 二 報表sql運用技巧 ...

二 小試牛刀 APK檔案分析

1 analyzeapk filename 載入檔案開始分析 androguard analyze androguard version 3.1.1 started depending on the size of the apk,this might take a while.in 2 1 a 表...

flask成長記(二)

蝸牛真的是蝸牛啊,就jinja2這麼個東西也抽象的暫且理解不了。不過也真是,你弄那麼複雜幹什麼啊?說的裝逼的。這麼理解jinja2這個東西 先把引擎這倆字兒拋開。一般情況下,會有你提交給伺服器東西,伺服器存入到資料庫和伺服器返回給使用者資料這兩個操作。模板是用在後面這個返回給使用者這個操作。你總不可...