前端單元測試(Unit Testing)整理

是什麼

wiki: 在計算機編程中,單元測試(英語:Unit Testing)又稱爲模塊測試, 是針對程序模塊來進行正確性檢驗的測試工作。程序單元是應用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數、過程等;對於面向對象編程,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法。

爲什麼

正確性: 測試可以驗證代碼的正確性,在上線前做到心裏有底;
自動化: 通過編寫測試用例,可以做到一次編寫,多次運行;
解釋性: 測試用例用於測試接口、模塊的重要性,那麼在測試用例中就會涉及如何使用這些 API。其他開發人員如果要使用這些API,那閱讀測試用例是一種很好地途徑,有時比文檔說明更清晰;
保證重構: 互聯網行業產品迭代速度很快,迭代後必然存在代碼重構的過程,那怎麼才能保證重構後代碼的質量呢?有測試用例做後盾,就可以大膽的進行重構;
簡化集成: 單元測試可以減少單元自身的不確定性,當單元集成在一起測試可已更加容易;

怎麼做

我要測什麼: 函數運行流程(函數是否如預期被調用)、校驗參數(某函數接收的參數和預期是否一致)、校驗返回值(函數應該返回什麼)

工具

斷言庫: chai

TDD: assert

BDD: expertshould

測試框架: mocha

測試覆蓋率: istanbul

測試運行器: karma

mock庫: sinon

原則

  1. 測試用例需要覆蓋所有分支;
  2. 除了必要的正確邏輯分支,針對 if else、switch、&&、|| 等的邏輯判斷也都需要進行測試,以保證函數所可能產生的行爲能如預期。
  3. 儘可能將被測試的代碼與其他代碼進行隔離,明確測試主邏輯,外部依賴使用 mock、stub 等替代。
  4. 凡是非本項目開發的代碼,都可以認爲是第三方代碼。
  5. 對於使用的第三方工具庫,我們是在信任它的基礎上進行使用,既然選擇信任,就沒有測試它的必要,就算出了問題也是提供工具庫的團隊的問題。
  6. 針對調用接口的函數,或者其他一些不穩定變量,當對其進行合理的 mock/stub,以保證不會因爲其的不穩定因素導致測試失敗。即將非純函數轉化爲純函數。
  7. 一次只測一個單元。
  8. 如果有兩個函數 A、B,A 調用了 B,那麼我們在測試A的時候應該 stub 掉 B,這樣能保證測試失敗的時候,準確的找到錯誤的原因。反之,可能是B方法出了問題,導致A的測試失敗了,測試結果就會有誤導性。
  9. 有些項目中,測試代碼是先於開發代碼完成的。當我們想測試 A 的時候,可能 B 還沒有實現,這個時候,也是需要 stub 掉 B。

建議

  1. 測試先行(TDD),定輸入輸出,定默認值;
  2. 用例的描述要符合用例的目的;
  3. 測試用例具有可重複執行的能力;
  4. 測試用例避免依賴或影響其他用例;
  5. 業務變動時及時更新用例;
  6. 合理使用 describe 分組,合理使用 before、beforeEach、arfter 等鉤子,減少代碼複雜度;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章