TDD實務開發Day1

TDD實務的上課心得

一直以來都知道程式的品質很重要,也知道要靠測試來確保品質。TDD相關的書也看了一些,但是在實做上總是卡關。一直到今天才有被點開的感覺


測試的目的,為了確保程式的行為能符合預期。也就是說,只要測試案例足以代表需求,那麼系統只要能夠通過測試案例,也就代表系統符合需求。

需求->規格->測試案例->程式

最高指導原則:『滿足需求!』

單元測試是所有測試中的最小單位,測試的目標可能是一個類別或一個method,主要是驗證這個物件對外的行為是否符合期待。將單元測試集合起來,就是物件的說明書。

實務上的學習順序

  1. 先學會用Test framework,學會寫Unit test
  2. 學會降低程式碼的相依性,減少耦合
  3. 學會用Mock/Stub framework來模擬相依元件,做到隔離測試
  4. 進入基本的TDD
  5. 配合BDD,進入實務的TDD

單元測試的原則:FIRST

FIRST中的『I』,講的是獨立測試,測試程式中只驗證目標程式的行為,其他變因要全部隔離。就好比做實驗,要把變因減少,才能得到明確的實驗結果。

寫單元測試還有一個好處,可以幫助我們發現程式潛在的設計問題。為了能夠獨立測試目標程式,我們會自然的去尋找解耦合的方法。解耦合最直覺的就是透過注入的方式,將相依物件拉到外部,由外部注入目標程式。用介面隔離的目的是為了可抽換、擴充性,那如果沒有明顯的需求,多加介面只是增加複雜度(Over Design)。

相依物件抽離之後,在測試程式中就可以用stub模擬相依物件,注入目標程式,來驗證目標程式的行為是否符合預期。