在JavaScript中,單元測試是針對程式模組(軟體設計的最小單位)來進行正確性檢驗的測試工作,其目標是隔離程式模組並證明這些單個模組是正確的。單元測試能確保在開發過程的早期就發現問題,可以使程式設計師方便地檢查程式碼片斷是否依然正常工作。
本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
在計算機程式設計中,單元測試(又稱為模組測試)是針對程式模組(軟體設計的最小單位)來進行正確性檢驗的測試工作。程式單元是應用的最小可測試部件。在過程化程式設計中,一個單元就是單個程式、函數、過程等;對於物件導向程式設計,最小單元就是方法,包括基礎類別(超類)、抽象類、或者派生類(子類)中的方法。
每個理想的測試案例獨立於其它案例;為測試時隔離模組,經常使用stubs、mock 或fake等測試馬甲程式。單元測試通常由軟體開發人員編寫,用於確保他們所寫的程式碼符合軟體需求和遵循開發目標。
單元測試的目標是隔離程式模組並證明這些單個模組是正確的。單元測試能確保在開發過程的早期就能發現問題,是為了讓程式「死得更早」。我們應該從開發的早期就為所有函數和方法編寫單元測試,可讀性強的單元測試可以使程式設計師方便地檢查程式碼片斷是否依然正常工作。良好設計的單元測試案例覆蓋程式單元分支和迴圈條件的所有路徑。採用這種自底向上的測試路徑,先測試程式模組再測試模組的集合,一旦變更導致錯誤發生,藉助於單元測試可以快速定位並修復錯誤。
單元測試在後臺開發中非常流行和普及,比如JAVA開發者的JUnit等,而在前端開發中則使用的非常少。究其原因,主要是單元測試更適用於邏輯程式碼的測試,這對於JAVA等後臺程式語言來說測試起來非常方便,但是前端開發很多時候要要UI打交道,UI相關的程式碼不是不可以進行單元測試,但的確很麻煩,比起邏輯程式碼來說困難多了,這就導致了單元測試在前端開發沒有普及起來。
但是隨著單元測試的普及,尤其是敏捷開發的推動,湧現了許多優秀的JavaScript單元測試框架,如QUnit、Jasmine等。所有的這些框架基本上都能對Javascript程式碼進行很好的測試,當然UI部分的程式碼測試一樣比較麻煩,但是我們可以通過精心構造我們的測試程式碼來測試部分UI程式碼。但是每個框架都不是萬能的,它們都有各自擅長的領域,下面選取了幾個具有代表性的框架進行介紹。
l QUnit框架
a) 簡介
QUnit是jQuery團隊開發的JavaScript單元測試工具,功能強大且使用簡單。目前所有的JQuery程式碼都使用QUnit進行測試,原生的JavaScript也可以使用QUnit。
最初,John Resig將QUnit設計為jQuery的一部分。2008年,QUnit才有了自己的名字、主頁和API檔案,也開始允許其他人用它來做單元測試。但當時QUnit還是基於jQuery的。直到2009年,QUnit才可以完全的獨立執行。
b)優點
使用起來非常方便,有漂亮的外觀和完整的測試功能(包括非同步測試);
非常簡單,容易上手,目前公開的API只有19個;
不需要依賴其它任何軟體包或框架,只要能執行JS的地方就可以,QUnit本身只有一個JS檔案和CSS檔案,當然如果需要可以和jQuery等其它框架整合;
不僅支援在瀏覽器中測試,還支援在Rhino和node.js等後端測試。
c) 不足
對自動化支援不好,很難和Ant、Maven或自動構建等工具整合,主要用在瀏覽器中進行測試。
l Jasmine框架
a)簡介
Jasmine是一個有名的JavaScript單元測試框架,它是獨立的行為驅動開發框架,語法清晰易懂。
行為驅動開發(BDD):是一種敏捷軟體開發的技術,它鼓勵軟體專案中的開發者、QA和非技術人員或商業參與者之間的共同作業。BDD最初是由Dan North在2003年命名,它包括驗收和客戶測試驅動等的極限程式設計的實踐,作為對測試驅動開發的迴應。在過去的數年裡,得到了極大的發展。
BDD的重點是通過與利益相關者的討論取得對預期的軟體行為的清醒認識。它通過用自然語言書寫非程式設計師可讀的測試用例擴充套件了測試驅動開發方法。行為驅動開發人員使用混合了領域中統一的語言的母語語言來描述他們的程式碼的目的。這讓開發者得以把精力集中在程式碼應該怎麼寫,而不是技術細節上,而且也最大程度的減少了將程式碼編寫者的技術語言與商業客戶、使用者、利益相關者、專案管理者等的領域語言之間來回翻譯的代價。
BDD的做法包括:
l 確立不同利益相關者要實現的遠景目標
l 使用特性注入方法繪製出達到這些目標所需要的特性
l 通過由外及內的軟體開發方法,把涉及到的利益相關者融入到實現的過程中
l 使用例子來描述應用程式的行為或程式碼的每個單元
l 通過自動執行這些例子,提供快速反饋,進行迴歸測試
l 使用「應當(should)」來描述軟體的行為,以幫助闡明程式碼的職責,以及回答對該軟體的功能性的質疑
l 使用「確保(ensure)」來描述軟體的職責,以把程式碼本身的效用與其他單元(element)程式碼帶來的邊際效用中區分出來。
l 使用mock作為還未編寫的相關程式碼模組的替身
BDD特性注入:一個公司可能有多個會帶來商業利益的不同願景,通常包括盈利、省錢或保護錢。一旦某個願景被開發小組確定為當前條件下的最佳願景,他們將需要更多的幫助來成功實現這個遠景。
然後確定該願景的主要利益相關者,會帶入其他的利益相關者。每個相關者要定義為了實現該願景他們需要完成的目標。例如,法務部門可能要求某些監管要得到滿足。市場行銷負責人可能要參加將使用該軟體的使用者的社群。安全專家需要確保該軟體不會受到SQL隱碼攻擊的攻擊。
通過這些目標,會定義出要實現這些目標所需要的大概的題目或者特性集合。例如,「允許使用者排序貢獻值」或「交易審計」。從這些主題,可以確定使用者功能以及使用者介面的第一批細節。
b) 優點
它是基於行為驅動開發實現的測試框架,它的語法非常貼近自然語言,簡單明瞭,容易理解。
能很方便的和Ant、Maven等進行整合進行自動化測試,也可以方便和Jekins等持續整合工具進行整合,可以生成測試結果的XMl檔案。
它有豐富的API,同時使用者也支援使用者擴充套件它的API,這一點很少有其它框架能夠做到。
使用方便簡單,只需要引入兩個js檔案即可
不僅支援在瀏覽器中測試,還支援在Rhino和node.js等後端測試。
對於Ruby語言有特別的支援,能夠非常方便的整合到Ruby專案中去
c) 不足
在瀏覽器中的測試介面不如QUnit美觀、詳細。
l JsTestDriver
a) 簡介
JsTestDriver是一個JavaScript單元測試工具,易於與持續構建系統相整合並能夠在多個瀏覽器上執行測試輕鬆實現TDD風格的開發。當在專案中設定好JsTestDriver以後,如同junit測試java檔案一般,JsTestDriver可以直接通過執行js檔案來進行單元測試。JsTestDriver框架本身就是JAVA的jar包,需要在本地執行並監聽一個埠。
b) 優點
可以一次測試多個瀏覽器,使用方法是在啟動服務時可以將多個瀏覽器的路徑作為引數傳進去。可以在多臺機器上的瀏覽器中執行,包括移動裝置。
測試執行得很快,因為不需要將結果新增到DOM中呈現出來,它們能夠同時在任意多的瀏覽器中執行,未修改的檔案瀏覽器會從快取提取。
不需要HTML配件檔案,僅僅只需提供一個或多個指令碼和測試指令碼,測試執行器執行時會建立一個空檔案。
能很方便的和Ant、Maven等進行整合進行自動化測試,也可以方便和Jekins等持續整合工具進行整合,可以生成測試結果的XML檔案。
有Eclipse和IntelliJ外掛,可以很方便的在這兩個IDE中進行測試,和JUnit很像。
支援其它測試框架,可以測試其它測試框架寫的測試程式碼,比如有對應的外掛可以將QUnit和Jasmine測試程式碼轉換成JsTestDriver的測試程式碼。
c) 不足
不能在瀏覽器中測試,只能通過自動化工具或控制檯執行。生成的結果不夠直觀。
安裝使用稍微有點麻煩,依賴於JAVA環境。
l FireUnit
a) 簡介
FireUnit是一個基於Firebug的Javascript的單元測試框架。簡單說來,FireUnit給Firebug增加了一個標籤面板,並提供了一些簡單的JavaScript API來記錄和檢視測試。
b) 優點
簡單易用
c) 不足
功能不多,測試程式碼常常寫在原始碼裡,雖然可以實時地看到效果,但耦合太強,不易清理
只執行在Firefox下
【相關推薦:】
以上就是JavaScript單元測試有什麼用的詳細內容,更多請關注TW511.COM其它相關文章!