1. 程式人生 > >c++ 測試框架簡介

c++ 測試框架簡介

 摘 要:測試驅動開發,是在明確要開發某個功能後,首先思考如何對這個功能進行測試,並完成測試程式碼的編寫,然後編寫相關的程式碼滿足這些測試用例。文中的測試驅動示例完整的表現了一個測試驅動開發的基本過程。
中國論文網 http://www.xzbu.com/8/view-3693823.htm
  關鍵詞:測試驅動開發 GTest Gmock
  1、測試驅動簡介
  測試驅動開發,英文全稱Test-Driven Development,簡稱TDD,是一種不同於傳統軟體開發流程的新型的開發方法。就是在明確要開發某個功能後,首先思考如何對這個功能進行測試,並完成測試程式碼的編寫,然後編寫相關的程式碼滿足這些測試用例。然後迴圈進行新增其他功能,直到完成全部功能的開發。

  測試驅動開發的整個過程跟傳統的軟體開發過程有很大的區別,它的基本過程如下:
  1) 明確當前要完成的功能。可以記錄成一個 TODO 列表。
  2) 快速完成針對此功能的測試用例編寫。
  3) 測試程式碼編譯不通過。
  4) 編寫對應的功能程式碼。
  5) 測試通過。
  6) 對程式碼進行重構,並保證測試通過。
  7) 迴圈完成所有功能的開發。
  2、單元測試
  傳統的單元測試
  單元測試其實在各個行業被廣泛應用,舉個例子說生產線上生產電視機之前,必須會對每個元件都進行測試,如果連原件都是壞的,那麼生產出的電視也一定有質量問題。這些元件拼裝成電路板後也要進行測試,就是通過這一層層的測試保證才能生產出一個合格的產品。

  而在傳統的軟體開發中,單元測試是白盒測試的一部分,測試人員編寫的一系列的測試程式碼,用於檢驗被測程式碼的一個很小的、很明確的功能是否正確。通常而言,一個單元測試是用於判斷某個特定條件(或者場景)下某個特定函式的行為。舉個例子:開發人員開發了一個列表功能的模組,測試用例就是像列表中新增一個值,然後測試是否能取出剛剛新增的值。或者刪除值,看看列表是否為空。
  測試驅動中的單元測試
  測試驅動開發,它要求在編寫某個功能的程式碼之前先編寫單元測試,然後只編寫使測試通過的功能程式碼,通過測試來推動整個開發的進行。這有助於編寫簡潔可用和高質量的程式碼,並加速開發過程。
  舉個比較生動的例子,蓋房子的時候,工人師傅砌牆,會先用樁子拉上線,以使磚能壘的筆直,因為壘磚的時候都是以這根線為基準的。TDD就是這樣的原理,先寫測試程式碼,就像工人師傅先用樁子拉上線,然後編碼的時候以此為基準,只編寫符合這個測試的功能程式碼。而一個外行人壘牆,卻不知道拉線,而是直接把磚往上壘,壘了一些之後再看是否筆直,這時候可能會用一根線,量一下砌好的牆是否筆直,如果不直再進行校正,敲敲打打。

  使用傳統的軟體開發過程就像這樣,先編碼,編碼完成之後才寫測試程式,以此檢驗已寫的程式碼是否正確,如果有錯誤再一點點修改。
  你覺著應該先拉線再砌牆,還是先砌牆再拉線呢?如果你喜歡前者,那就轉入TDD陣營吧!
  3、測試的應用框架簡介
  C++語言接近組合語言,高效。編譯生成的目的碼質量高,程式執行效率高,一直是不可替代的語言。但C++語言過於底層,缺少一些高階語言的特性,導致C++上的測試驅動框架的實現各有優劣,沒有一個統治地位的測試驅動框架。在C++上的測試工具主要有CppTest,CxxTest和GTest這幾種。下面對這幾個測試框架進行簡單的介紹。
  CppUnit
  cppunit,這是一個與JUnit類似的框架,但這個框架很陳舊了,並且有著一些缺點。
  CxxUnit
  因為cppunit的多種缺陷,cppunit的鼻祖之一重寫了一套C/C++單元測試框架,這就是cxxtest。與cppunit相比,可以說cxxtest具有如下一些優點:不需要RTTI;不需要成員模板功能;不需要異常處理等。它完全是作為一套標頭檔案的集合而進行釋出的。另外由於cppunit帶有Make檔案, 所以只能用在主要的作業系統中,而應用到不常見作業系統中原始碼及Make檔案修改的工作量就會很大。cxxtest不帶Make檔案, 所以也可用於其他作業系統中,具有更好的可移植性和可用性。
  當然cxxtest也有一些缺點,例如需要用到perl或者python對測試程式碼的標頭檔案進行文法掃描,生成可執行程式碼,準備工作比較麻煩。
  Google C++ Testing Framework和Google C++ Mocking Framework
  Google C++ Testing Framework簡稱“GTest”,是大名鼎鼎的Google的開源C++單元測試框架。它已經在多個平臺上驗證 ( Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian )。是一個基於 xUnit 構架的測試框架。
  相對與CxxUnit通過指令碼語言掃描程式碼的方式,GTest則是通過C++自身的方式生成測試程式碼。和cxxtest來說兩種實現方式各有優勢,CxxTest相對來說初期配置比較麻煩,測試用例寫起來簡單。GTest功能相對CxxTest更強大。
  Google C++ Mocking Framework 簡稱“Gmock”,Gmock很強大的測試工具,它從另一種思路,對GTest難以測試的程式碼進行測試。它本身不是一個測試框架,它需要一個測試框架來執行測試。
  Gmock是Google 公司於 2008 年釋出的用於單元測試工具,且遵循 New BSD License (可用作商業用途)的開源專案,並且 Gmock 可以支援絕大多數大家所熟知的平臺。
  Gmock官方網頁:http://code.google.com/p/googlemock/。
  GTest官方網頁:http://code.google.com/p/googletest/。
  4、GTest(Google C++ Testing Framework)
  上面的測試驅動示例完整的表現了一個測試驅動開發的基本過程。測試用例通過斷言來比較程式碼返回值是否正確。斷言通過比較,會產生三種結果:成功,非致命失敗和致命的失敗。測試用例會根據程式邏輯執行所有的斷言並記錄返回值,但如果斷言返回致命的失敗,當前測試用例會被終止。
  測試通過驗證斷言來檢測程式碼的正確性,如果測試崩潰或者斷言返回失敗,那麼程式碼就是有問題的。
  一個測試案例包含一個或者多個測試,推薦將這些測試分組,每個分組被稱為測試案例集合。這些分組反映了被測試程式碼的結構。當一個測試案例中的多個測試使用一個公用的物件或者子用例時,可以將它們放到一個測試韌體中。
  參考文獻
  [1] 測試驅動開發 Kent Beck 中國電力出版社 2004.4
  [2]Gmock官方網頁:http://code.google.com/p/googlemock/。
  [3]GTest官方網頁:http://code.google.com/p/googletest/。
  [4] 開源軟體之道 蔡駿傑 電子工業出版社,2010.4

相關推薦

c++ 測試框架簡介

 摘 要:測試驅動開發,是在明確要開發某個功能後,首先思考如何對這個功能進行測試,並完成測試程式碼的編寫,然後編寫相關的程式碼滿足這些測試用例。文中的測試驅動示例完整的表現了一個測試驅動開發的基本過程。中國論文網 http://www.xzbu.com/8/view-369

Python 各種測試框架簡介(三):nose

調用 QQ upm href 命令 math 一點 發現 方法 轉載:https://blog.csdn.net/qq_15013233/article/details/52527260 摘要 這裏將從(pythontesting.net)陸續編譯四篇 Python 測試框

doctest 2.1.0 釋出,快速靈活的 C++ 測試框架

doctest 2.1.0 已釋出,更新內容: Closed issues: doctest::String ctor with non-zero terminated string #165 thread_local is not supported on iOS 9.0 

doctest 2.2.0 釋出,快速靈活的 C++ 測試框架

   doctest 2.2.0 已釋出,更新內容: remove the FAST_ versions of the binary asserts (not a breaking change!) #167 [compile times] make the D

整合C#測試框架和Selenium對於Web系統實現自動化測試

系統環境: 軟體需求: Visual C# 2010,Mozilla Firefox,Selenium 硬體需求: Pentium III 450以上的CPU處理器,64MB以上的記憶體,200MB的自由硬碟空間 內容簡介: 1. 利用Spy++進行W

(!)Python 各種測試框架簡介

一、doctest doctest 是一個 Python 發行版自帶的標準模組。本篇將分別對使用 doctest 的兩種方式——嵌入到原始碼中和做成獨立檔案做基本介紹。 1.doctest的概念模型 在 Python 的官方文件中,對 doctest 的介

C單元測試框架——CMockery簡介與示例

簡介 是google釋出的用於C單元測試的一個輕量級的框架。 主要特點: 免費且開源,google提供技術支援;輕量級的框架,使測試更加快速簡單;避免使用複雜的編譯器特性,對老版本的編譯器來講,相容性好;並不強制要求待測程式碼必須依賴C99標準,這一特性對許多嵌入式

Google C++單元測試框架---Gtest框架簡介(譯文)

一、設定一個新的測試專案   在用google test寫測試專案之前,需要先編譯gtest到library庫並將測試與其連結。我們為一些流行的構建系統提供了構建檔案: msvc/ for Visual Studio, xcode/ for Mac Xcode, make/

Google C++單元測試框架---Gtest框架簡介(譯文)[轉載]

一、設定一個新的測試專案  在用google test寫測試專案之前,需要先編譯gtest到library庫並將測試與其連結。我們為一些流行的構建系統提供了構建檔案: msvc/ for Visual Studio, xcode/ for Mac Xcode, make/ f

基於C#實現的自動化測試框架:發布自動觸發自動化回歸測試

exc 時間流 測試用例 出現 服務器 text types filter txt 接口自動化測試用例完成以後,以前都是發布以後手動運行測試用例。雖然手動運行下腳本也就是一個F5的事情,但是離自動化測試的標準差得很遠。這兩天有了個大膽的想法,想要實現以下發布時直接觸發自動化

.net/c#常用框架/中間件簡介

跨語言 bat 方法 entity 系統 wcf 序列 lpush 面向 任務調度 Quartz.NET:Quartz.NET是一個開源的作業調度框架,非常適合在平時的工作中,定時輪詢數據庫同步,定時郵件通知,定時處理數據等。 Quartz.NET允 許開發人員根

Google開源C++ 單元測試框架Google Test系列(gtest)之初始gtest

    下載           最新原始碼地址:https://github.com/google/googletest           V1.3和V1.

RobotFramework自動化測試框架(1)- RobotFramework簡介

 對於RobotFramework自動化測試框架,我這裡會從三個單元進行闡述,希望能對你有幫助。 RobotFramework簡介 RobotFramework是什麼? Robotframework 是由python編寫的,一個開源的基於關鍵詞驅動的自動化測試框架,它可以做基於UI或者介面

玩轉Google開源C++單元測試框架Google Test系列(gtest)(總)

前段時間學習和了解了下Google的開源C++單元測試框架Google Test,簡稱gtest,非常的不錯。 我們原來使用的是自己實現的一套單元測試框架,在使用過程中,發現越來越多使用不便之處,而這樣不便之處,gtest恰恰很好的解決了。 其實gtest本身的實現並不複雜

Google開源C++單元測試框架Google Test系列(gtest)之斷言

     gtest中,斷言的巨集可以理解為分為兩類,一類是ASSERT系列,一類是EXPECT系列。一個直觀的解釋就是: ASSERT_* 系列的斷言,當檢查點失敗時,退出當前函式(注意:並非退出當前案例)。   EXPECT_* 系列的斷言,當檢查點失敗時,繼續往下

Google開源C++單元測試框架Google Test系列(gtest)之引數化

      在設計測試案例時,經常需要考慮給被測函式傳入不同的值的情況。我們之前的做法通常是寫一個通用方法,然後編寫在測試案例呼叫它。即使使用了通用方法,這樣的工作也是有很多重複性的,程式設計師都懶,都希望能夠少寫程式碼,多複用程式碼。      Google的程式設計師也

Google開源C++單元測試框架Google Test系列(gtest)之- 事件機制

gtest提供了多種事件機制,非常方便我們在案例之前或之後做一些操作。總結一下gtest的事件一共有3種: 全域性的,所有案例執行前後。 TestSuite級別的,在某一批案例中第一個案例前,最後一個案例執行後  TestCase級別的,每個TestCase前後。 全域

Check—強大的C語言單元測試框架

repr free fail turn ram creat log cap less 1. 前言 在看基數樹源碼時,發現源碼裏面有個deps的依賴文件夾,deps裏是一個叫Check的源碼安裝包,Google之後發現Check原來是C語言單元測試框架。關於單元測試,Wik

C語言單元測試框架-Check

     雖然在UNIX上用C語言做開發已經有一段時間了,但是我不得不承認,自己單元測試做的並不好。恰好最近有新的開發任務,就學習了一些關於測試驅動開發的知識,準備改進自己的單元測試。XP程式設計已經興起好一段時間了,也形成了很多優秀的單元測試框架,例如:JUnit,想必使用

前端測試框架Jest系列教程 -- 簡介

系列教程: 寫在前面:   隨著網際網路日新月異的發展,使用者對於頁面的美觀度,流暢度以及各方面的體驗有了更高的要求,我們的網頁不再是簡單的承載文字,圖片等簡單的資訊傳遞給使用者,我們需要的是更加美觀的頁面展示,更快的瀏覽速度,更加的豐富的使用者互動效果。好的使用者體驗必要需要優秀的前