筆者按: 在這一學期的軟件測試課程學習中,我逐漸接觸到了軟件測試的相關知識,實現了從較爲關注軟件編寫與實現等前端內容到逐漸理解軟件測試等項目後期環節的跨前端
越與 轉變。而在軟件測試領域,咱們常常會聽到測試框架這個名詞,那什麼是測試框架?它在軟件測試中起到什麼樣的做用?我將就本身淺薄的學習心得,在這裏爲大java
家作一個簡單的分析與交流。程序員
正文: 咱們先來看一下百度百科給出的關於「框架」一詞的定義:「框架(framework)是一個基本概念上的結構,用於去解決或者處理複雜的問題。」 那麼若是咱們將框架框架
這一律念引入到軟件領域,能夠給出什麼樣的通常性概念呢?筆者在對比了多種解釋以後,認爲如下的這種解釋較爲歸納與全面:框架是整個或部分系統的可重用設計,函數
表現爲一組抽象構件及構件實例間交互的方法。工具
針對以上的定義,我認爲關鍵詞在兩個詞上:「可重用」與「交互」。若是想要深入理解這兩個詞的意義,我認爲,在這裏咱們應該深究如下咱們爲何須要在軟件測試單元測試
領域中引入測試框架的概念,隨着軟件項目的逐漸增大,軟件測試在軟件開發中的地位顯得愈來愈重要。若是軟件項目沒有良好的測試流程,隨着系統的增大,不管項目學習
管理人員仍是軟件開發人員都會對項目的前景失去信心,甚至會對項目的目標產生分歧,由於長期以來沒有對程序代碼和系統設計進行有效的控制,不少問題都被暫時掩測試
蓋或逐漸演化成其餘的問題。軟件開發週期越長,就會使得問題進化的版本越多,最後形成的結果是「剪不斷,理還亂」。而測試框架的好處在於:提升開發速度,提高測設計
試代碼的執行效率;提升軟件代碼質量,同時引入重構概念,讓代碼更乾淨和富有彈性;提高系統的可信賴度,做爲迴歸測試的一種實現方法支持修復後「再測試」,確保
代碼的正確性。經常使用的測試框架分類包括自動化測試框架和單元測試框架。根據所用開發平臺不一樣,也可以使用不一樣的測試框架展開測試。
關於「可重用」,我認爲咱們能夠將軟件測試框架簡單地理解爲:測試框架不是一個現成的完備的系統,而是一個半成品,測試工程師能夠結合本身的測試對象的測試
需求,將其轉化爲對本身可用的測試用例。打一個簡單的比方,測試框架就比如一個搭建好的舞臺,而測試工程師(舞者)就這一在這個開放的、標準化的搭建好的舞臺
上跳出本身想要跳出的舞蹈。軟件測試框架提取了軟件測試系統中的共性部分而造成的體系結構,在其基礎上進行軟件測試,只要調整部份內容就能夠知足本身的需求,可
以有效地下降開發成本,縮短開發時間。這就是軟件測試框架「可重用」屬性的意義所在。
關於「交互」,咱們知道,如今經常使用的測試框架有自動化測試框架和單元測試框架,自動化測試是爲了代替目前較多的手動測試,而單元測試則是單元測試是整個測試
流程中最基礎的部分,它們要求程序員儘量早地發現問題,並給予控制,這是其一。另外,若是集成測試出現問題,它們能夠幫助診斷。這樣就爲在軟件開發流程中建
立高效的事件反應機制打下了堅實基礎。 若是測試框架中沒法實現構建的交互,單元測試就會變得艱難而難以開展,因而可知測試框架中「交互」一詞的重要意義。
筆者結合本身學習到的知識,在這裏給出單元測試框架的一個例子:JUnit,關於其餘的種類的測試框架的具體實例,有興趣的讀者能夠查閱相關論文,升入研究。
JUnit 是 Java 社區中知名度最高的單元測試工具;CppUnit 是個基於 LGPL 的開源項目,最第一版本移植自 JUnit,是一個很是優秀的開源測試框架。
使用JUnit時,主要都是經過繼承TestCase類別來撰寫測試用例,使用testXXX()名稱來撰寫單元測試。
用JUnit寫測試真正所須要的就三件事:
1.一個import語句引入全部junit.framework.*下的類。
2.一個extends語句讓你的類從TestCase繼承。
3.一個調用super(string)的構造函數。
功能類MathTool:
JUnit提供了一些輔助函數,用於幫助你肯定某個被測試函數是否工做正常。一般而言,咱們把全部這些函數統稱爲斷言。斷言是單元測試最基本的組成部分。
1. assertEquals([String message], expected,actual)
比較兩個基本類型或對象是否相等(expected和actual是原始類型數值(primitive value)或者必須爲實現比較而具備equal方法);
2.assertFalse([String message],boolean condition)
對布爾值求值,看它是否爲「真「;
3.assertTrue([String message],boolean condition)
對布爾值求值,看它是否爲「假「;
4.assertNull([String message],java.lang.Object object)
檢查對象是否爲「空「;
5.assertNotNull([String message],java.lang.Object object)
檢查對象是否不爲「空」;
6.assertSame([String message],expected,actual)
檢查兩個對象是否爲同一實例;
7.assertNotSame([String message],expected,actual)
檢查兩個對象是否不爲同一實例;
8. fail( String message )
使測試當即失敗,其中 message 參數使可選的。這種斷言一般被用於標記某個不該該到達的分支(例如,在一個預期發生的異常以後)
相關知識:
白盒與黑盒框架