<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
開發者雖然主要負責工程裡的開發任務,但是每個開發完畢的功能都是需要開發者自測通過的,所以經常會聽到開發者提起單元測試的話題。那麼今天我就帶大夥一起來看看大名鼎鼎的谷歌 C++ 測試框架 GoogleTest.
來看看谷歌官方是怎麼介紹這個框架的:
Googletest 是由測試技術團隊根據 Google 的特定要求和約束開發的測試框架。無論您是在 Linux,Windows 還是 Mac 上工作,如果您編寫 C++ 程式碼,googletest 都可以為您提供幫助。它支援任何型別的測試,而不僅僅是單元測試。
雖然谷歌是根據特定的需求和限制條件來開發這個框架的,但是它自己也指明瞭這個框架還可以用於其它用途,比如作為模擬器使用,當然這就扯遠了,暫且不提。
谷歌在開發這套框架的時候,是有一套基本的設計思路的。
他們認為測試應該是相互獨立而且是可重複的。如果正在做的測試由於其他測試的成功或失敗而受到影響,這無疑會令人感到痛苦。GoogleTest 通過在不同的物件上執行不同的測試來實現測試的相互隔離。當其中一個或多個測試失敗時,測試框架還允許測試者繼續單獨執行測試用例以達到快速偵錯。測試應該組織良好,並反映測試程式碼的結構。有很多測試其實可以共用資料和子例程的,那麼 Googletest 提供了測試套件的概念將相關測試分組,測試套件中的所有測試就可以共用資料和子例程了。這種模式其實很常見,並且使得測試易於維護,特別是當你需要切換到新的程式碼工程時,測試流程將極大簡化。
像谷歌這種規模的科技企業,內部的 C++ 專案非常之多,還是跨平臺的,那麼就對測試框架有平臺無關的要求了。GoogleTest 正是如此,無論你是用的是那款編譯器,哪個平臺,通吃。
當然,測試的過程中理應提供儘可能全面的資訊幫助開發者理解執行軟體流程,GoogleTest 也不例外。就算測試過程中,某個測試執行失敗被停止了,測試框架也會繼續其它測試。如果你不希望某個測試由於失敗而停止,可以設定該測試為非致命報錯(non-fatal)。像這樣的測試過程,可以幫助開發者在單個執行-編輯-編譯週期中找到儘可能多的問題 bug。這樣的測試框架是不是很高效?
雖說問題 bug 出現就夠令開發者討厭的了,但是自測過程的繁瑣事那就更糟心了(頭髮怎麼掉得那麼快),比如,開發者除了需要測試具體內容還得自己跟蹤測試清單。Googletest 就可以幫助你從這裡邊脫身出來,做一枚瀟灑的碼農。
這裡問一句,你用過 JUnit 或 PyUnit 嗎?如果有的話,那麼 Googletest 對你來說真的是易如反掌了。據說 Googletest 是基於 xUnit 架構開發而來。至於什麼是 xUnit 架構,有機會我再聊聊吧。
測試框架在測試過程中,基本的測試操作就是使用斷言(assert)來驗證測試程式碼的行為,崩潰或者斷言失敗都表示被測試程式碼的行為不正確,否則正確。
來看一下簡單的測試樣例(環境設定安裝會在後面有詳細介紹)
#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(); }
這個測試樣例是為了測試函數 int square(const int a) 的行為是否正確。
編譯生成可執行檔案之後,執行起來
可以看到,上面總共有一個測試套件和一個測試。首先啟動一次全域性測試環境,使用框架提供的宏 TEST() 建立了一個測試套件,命名為 SquareTest,和一個測試,命名為 PositiveNos。然後,執行測試套件內包含的所有測試,測試通過 OK。全部測試結束後,解除安裝全域性測試環境。彙總全部測試結果 PASSED。測試流程結束。
以上就是C++ 測試框架GoogleTest入門介紹的詳細內容,更多關於C++ 測試框架GoogleTest的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45