天天看點

JavaScript有這幾種測試分類

譯者按: 也許你讨厭測試,但是你不得不面對它,是以至少區分一下單元測試、內建測試與功能測試?對吧...

原文:

What are Unit Testing, Integration Testing and Functional Testing? 譯者: Fundebug

為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用于學習。

JavaScript代碼測試有很多分類,比如單元測試(unit test)、內建測試(integration test)、功能測試(functional test)、端到端測試(end to end test)、回歸測試(regression test)、浏覽器測試(browser test)...

也許你會傻傻地分不清楚,它們是什麼?如何使用?什麼情況下使用?這篇部落格将解答你的疑問。

單元測試

單元測試指的是測試小的代碼塊,通常指的是獨立測試單個函數。如果某個測試依賴于一些外部資源,比如網絡或者資料庫,那它就不是單元測試。

單元測試一般很容易寫。一個單元測試通常是這樣的:為某個函數提供某些輸入值,然後驗證函數的傳回值是否正确。然而,如果你的代碼設計非常糟糕,則單元測試會很難寫。從另一個角度了解,單元測試可以幫助我們寫更好的代碼。

從某種意義上,單元測試就是代碼的骨幹。通過單元測試,可以幫助你優化代碼設計,可以保證修改代碼時正确無誤。

單元測試可以幫助我們避免一些常見的BUG。通常,程式員會在同一個細節上反複犯錯,如果為這些BUG添加單元測試,則可以有效避免這種情況。當然,你也可以使用內建測試和功能測試來解決這個問題,但是單元測試更加适合,因為單元測試更加細緻,可以幫助我們快速定位和解決問題。

什麼時候應該做單元測試呢?采用測試驅動開發(test driven development)的話,你應該一直寫單元測試。好的單元測試不僅可以避免BUG,還可以優化代碼,并且保證修改或者重構代碼時不會出錯。

流行的JavaScript單元測試工具有

Mocha

,

Jasmine

Tape

內建測試

內建測試就是測試應用中不同子產品如何內建,如何一起工作,這和它的名字一緻。內建測試與單元測試相似,但是它們也有很大的不同:單元測試是測試每個獨立的子產品,而內建測試恰好相反。比如,當測試需要通路資料庫的代碼時,單元測試不會真的去通路資料庫,而內建測試則會。

單元測試不夠時,這時就需要內建測試了。當你需要去驗證兩個獨立的子產品,比如資料庫和應用,保證它們能夠正确的一起工作,這時就需要內建測試了。為了驗證測試結果,你就需要通過查詢資料庫驗證資料正确性。

內建測試通常比單元測試慢,因為它更加複雜。并且,內建測試還需要配置測試環境,比如配置測試資料庫或者其他依賴的元件。這就使得編寫和維護內建測試更加困難,是以,你應該專注于單元測試,除非你真的需要內建測試。

你需要的內建測試應該少于單元測試。除非你需要測試多個子產品,或者你的代碼太複雜時,你才需要內建測試。并且,當你的代碼過于複雜時,我建議優化代碼以便進行單元測試,而不是直接寫內建測試。

通常,我們可以使用單元測試工具編寫內建測試。

功能測試

功能測試有時候也被稱作端到端測試,或者浏覽器測試,它們指的是同一件事。

功能測試指的是測試應用的某個完整的功能。對于網頁應用,功能測試意味着使用工具模拟浏覽器,然後通過點選頁面來測試應用。

單元測試可以測試單個函數,內建測試可以測試兩個子產品一起工作。功能測試則完全是另外一個層次。你可以有上百個單元測試,但是通常你隻有少量的功能測試。這是因為功能測試太複雜了,難于編寫和維護。功能測試很慢,因為它需要模拟真實使用者進行網頁互動。

事實上,你不需要編寫非常詳細的功能測試。功能測試并不意味着你需要測試每一個功能,其實,你隻需要測試一些常見的使用者行為。如果你需要在浏覽器中手動測試應用的某個流程,比如新增賬號,這時你可以編寫一個功能測試。

對于單元測試,你會使用代碼去驗證結果,在功能測試中也應該這樣做。以新增賬號為例,你可以驗證浏覽器是否跳轉到了"感謝注冊"頁面。

當有些測試你需要手動在浏覽器下重複進行時,你應該編寫功能測試。注意不要寫得太細緻了,否則維護這些測試将是一個噩夢。

最流行的功能測試工具是

Selenium Selenium WebDriver

或者

Protractor

通常與Selenium一起使用,有時也使用

PhantomJS CasperJS

,注意你不需要使用真實浏覽器。

總結

測試JavaScript代碼時,應該着重于單元測試,它非常容易編寫和維護,除了可以減少BUG還有很多益處。而內建測試與功能測試應該作為補充。

歡迎加入

我們Fundebug

的全棧BUG監控交流群: 622902485。

JavaScript有這幾種測試分類

版權聲明:

轉載時請注明作者Fundebug以及本文位址:

https://blog.fundebug.com/2017/06/26/javascript-test-type/