欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++?測試框架GoogleTest入門介紹

 更新時間:2023年04月03日 16:36:16   作者:ENG八戒  
這篇文章主要為大家介紹了C++測試框架GoogleTest入門基礎(chǔ),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

開發(fā)者雖然主要負責(zé)工程里的開發(fā)任務(wù),但是每個開發(fā)完畢的功能都是需要開發(fā)者自測通過的,所以經(jīng)常會聽到開發(fā)者提起單元測試的話題。那么今天我就帶大伙一起來看看大名鼎鼎的谷歌 C++ 測試框架 GoogleTest.

簡單介紹

來看看谷歌官方是怎么介紹這個框架的:

Googletest 是由測試技術(shù)團隊根據(jù) Google 的特定要求和約束開發(fā)的測試框架。無論您是在 Linux,Windows 還是 Mac 上工作,如果您編寫 C++ 代碼,googletest 都可以為您提供幫助。它支持任何類型的測試,而不僅僅是單元測試。

雖然谷歌是根據(jù)特定的需求和限制條件來開發(fā)這個框架的,但是它自己也指明了這個框架還可以用于其它用途,比如作為模擬器使用,當(dāng)然這就扯遠了,暫且不提。

谷歌在開發(fā)這套框架的時候,是有一套基本的設(shè)計思路的。

他們認為測試應(yīng)該是相互獨立而且是可重復(fù)的。如果正在做的測試由于其他測試的成功或失敗而受到影響,這無疑會令人感到痛苦。GoogleTest 通過在不同的對象上運行不同的測試來實現(xiàn)測試的相互隔離。當(dāng)其中一個或多個測試失敗時,測試框架還允許測試者繼續(xù)單獨運行測試用例以達到快速調(diào)試。測試應(yīng)該組織良好,并反映測試代碼的結(jié)構(gòu)。有很多測試其實可以共享數(shù)據(jù)和子例程的,那么 Googletest 提供了測試套件的概念將相關(guān)測試分組,測試套件中的所有測試就可以共享數(shù)據(jù)和子例程了。這種模式其實很常見,并且使得測試易于維護,特別是當(dāng)你需要切換到新的代碼工程時,測試流程將極大簡化。

像谷歌這種規(guī)模的科技企業(yè),內(nèi)部的 C++ 項目非常之多,還是跨平臺的,那么就對測試框架有平臺無關(guān)的要求了。GoogleTest 正是如此,無論你是用的是那款編譯器,哪個平臺,通吃。

當(dāng)然,測試的過程中理應(yīng)提供盡可能全面的信息幫助開發(fā)者理解執(zhí)行軟件過程,GoogleTest 也不例外。就算測試過程中,某個測試執(zhí)行失敗被停止了,測試框架也會繼續(xù)其它測試。如果你不希望某個測試由于失敗而停止,可以設(shè)置該測試為非致命報錯(non-fatal)。像這樣的測試過程,可以幫助開發(fā)者在單個運行-編輯-編譯周期中找到盡可能多的問題 bug。這樣的測試框架是不是很高效?

雖說問題 bug 出現(xiàn)就夠令開發(fā)者討厭的了,但是自測過程的繁瑣事那就更糟心了(頭發(fā)怎么掉得那么快),比如,開發(fā)者除了需要測試具體內(nèi)容還得自己跟蹤測試清單。Googletest 就可以幫助你從這里邊脫身出來,做一枚瀟灑的碼農(nóng)。

這里問一句,你用過 JUnit 或 PyUnit 嗎?如果有的話,那么 Googletest 對你來說真的是易如反掌了。據(jù)說 Googletest 是基于 xUnit 架構(gòu)開發(fā)而來。至于什么是 xUnit 架構(gòu),有機會我再聊聊吧。

測試框架在測試過程中,基本的測試操作就是使用斷言(assert)來驗證測試代碼的行為,崩潰或者斷言失敗都表示被測試代碼的行為不正確,否則正確。

初體驗

來看一下簡單的測試樣例(環(huán)境配置安裝會在后面有詳細介紹)

#include <math.h>
#include <gtest/gtest.h>
int square(const int a)
{
    int b = a * a;
    if (b != b) {
        return -1;
    } else {
        return a * a;
    }
}
TEST(SquareTest, PositiveNos) { 
    ASSERT_EQ(0, square(0));
    ASSERT_EQ(36, square(6));
    ASSERT_EQ(324, square(18));
}
int main(int argc, char **argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

這個測試樣例是為了測試函數(shù) int square(const int a) 的行為是否正確。

編譯生成可執(zhí)行文件之后,運行起來

可以看到,上面總共有一個測試套件和一個測試。首先啟動一次全局測試環(huán)境,使用框架提供的宏 TEST() 創(chuàng)建了一個測試套件,命名為 SquareTest,和一個測試,命名為 PositiveNos。然后,運行測試套件內(nèi)包含的所有測試,測試通過 OK。全部測試結(jié)束后,卸載全局測試環(huán)境。匯總?cè)繙y試結(jié)果 PASSED。測試流程結(jié)束。

以上就是C++ 測試框架GoogleTest入門介紹的詳細內(nèi)容,更多關(guān)于C++ 測試框架GoogleTest的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論