本次課題為透過「 String Calculator - osherove.com 」這道 Kata,練習 TDD 循環。

前言

本系列為 TDD 測試驅動開發的練習文,會持續寫一段時間,並把過程透過日記形式寫下來。

TDD 循環

https://upload.wikimedia.org/wikipedia/commons/0/0b/TDD_Global_Lifecycle.png - 維基百科https://upload.wikimedia.org/wikipedia/commons/0/0b/TDD_Global_Lifecycle.png - 維基百科

練習環境

  • PHP 7.3.28
  • Laravel 8.48.2 開個新的專案用來練習寫測試
  • composer 裝的 phpunit/phpunit9.5.6

練習重點

練習 TDD 的思考方式,與實作的順序

遵循以下順序開發:

  • 寫測試(只測一件事) >
  • 測試執行得到紅燈 >
  • 寫對應方法 >
  • 測試執行得到綠燈 >
  • 重構 >
  • 測試執行得到綠燈 >
  • 回歸測試得到紅一些/全部紅燈 > 修復對應功能與測試 > 回歸測試得到全部綠燈
  • commit >
  • 寫測試 (只測一件事,或新的測試案例)

練習「快速反應下一步」應該要做的事是什麼

練習題 (Kata)

這題為單元測試的藝術作者提供的 Kata: String Calculator - osherove.com

練習結果

請參考 commit 過程。

筆記

記錄一下遇到的問題

  • 如果往下測試 > 實作,遇到設計上不容易測試的話,可先退回重構,完成重構,才重新繼續下一個紅燈
  • 除了TDD 的順序要注意外,記得測試通過就先看要不要重構,並遵守 SRP (重構觀念也要持續學習)
  • 若有覆寫 setUp() 不可省略 parent::setUp()
  • 實作到 pdf 中的第 11 個測試案例時,重構了一大段,直到綠燈,但覺得應該有更好的寫法,目前寫法都是把 delimiter 改為 , 在去切開 numbers

最後

透過這種有題目的方式練習 TDD,會比純看書或看網路文章還要來得,更有心得;有任何問題或想法,歡迎留言交流,如果寫的內容有錯誤的地方,希望能不吝指點,感謝。

參考連結



文章作者: littlebookboy
永久鏈結: https://blog.genesu.me/2021/06/tdd-daily-001-tdd-cycle-practice/
許可協議: 署名-非商業性使用-相同方式共享 4.0 國際(CC BY-NC-SA 4.0)