單元測試的F.I.R.S.T原則(F.I.R.S.T Principles of Unit Testing)



剛好有網友提問,測試第三方API是不是單元測試(Unit Test),正好順便寫這邊紀錄一下,我的理解是,不是,這比較偏向整合測試(Integration Test),因為測試API依賴了,網路、Server、database所以我將它認定為整合測試,單元測試我的認知是一個class的測試,而根據我自己學習軟體測試的經驗,單元測試的發展方向是往開發的輔助工具去走,在更改程式時,可以藉由更快速的單元測試,來發現改壞或未符合需求(TDD)的問題,所以才會有FIRST原則。

First 快速
測試如果跑得不夠快,就不會讓人想常常跑,不常跑的測試最後也就失去的它意義了。

所以實務上會使用mock工具,mock其他依賴的物件或環境,來加速測試的執行。

Independent 獨立
測試要相互獨立,一個測試不會依賴其他測試,如果互相依賴的話,一個測試的失敗會影響其他測試也跟著失敗,那麼在找問題點的時候將會變得更困難。

Repeatable 可重複
測試應該要可以在任何環境中重複執行。減少因環境因素而產生測試失敗的問題。

Self-Validating 自我驗證
測試程式應該要輸出布林值。不管是測試成功或失敗。

簡單來說就是可以在測試報告很清楚的看到紅燈(測試失敗)或綠燈(測試成功)。

Timely 及時
撰寫測試要及時,最好是在寫產品程式前先寫(TDD的概念)。

這邊其實是為了克服,如果先寫產品程式,很容易就會遇到程式過度依賴環境或沒有採用依賴注入...等,造成的程式可測試性很差問題。

最後很多定義或是原則,其實可以幫助我們學習跟理解,也有助於跟別人交流,但規則是死的,人是活的,有時候現實狀況,遇到跟教科書有衝突的問題,要學習著調整,最重要的事情是達成目的取得價值,而不是照課本上那樣做,別把自己束縛死,一頭撞死在牆上,希望大家看完這篇能有所學習,也歡迎交流。

參考
『無瑕的程式碼』一書

留言