安安,今年的鐵人賽,我想寫幾篇文章來說明TDD 這件事情,且用 TDD KATA 來入門 Golang 並在最後探索出如何和AI一起做TDD。
在 Day 2,我們將為 Golang TDD 實戰做好準備,搭建開發環境,安裝 Go 語言、VS Code 編輯器及必要的擴充套件,並撰寫第一個測試來驗證環境是否就緒。
在 Day 3,我們將深入 Golang 語法,學習如何設計「可測試」的程式碼。重點包括函式、結構與介面的使用,並透過實際範例來理解它們在 TDD 中的重要性。
在 Day 4,我們將深入 Golang 的測試框架,學習如何撰寫測試檔案 `_test.go`,並使用 `go test` 指令來執行和管理測試。掌握這些基礎後,我們就能開始實踐 TDD 循環了!
在 Day 5,我們將學習如何使用 Go 的測試套件和第三方庫 stretchr/testify 來撰寫更優雅的斷言 (Assertion)。掌握這些工具後,我們的測試程式碼將變得更清晰、更易讀,並能更好地表達我們的意圖。
在 Day 6,我們將深入 Golang 的表格驅動測試 (Table Driven Tests) 慣用法,學習如何使用表格來組織測試案例,讓測試程式碼更清晰、易於擴充。掌握這個模式後,你將能夠以最優雅的方式撰寫測試,並輕鬆應對各種情境。
在 Day 7,我們將學習如何處理測試中的外部依賴,使用 Mock 和 Stub 來隔離測試環境,確保我們的單元測試能夠專注於商業邏輯,而不受外部因素影響。掌握這些技巧後,你將能夠撰寫更穩定、更可靠的測試案例。
在 Day 8,我們將建立一個結構清晰、可擴充的 Go Modules 專案,為我們的 TDD Kata 練習做好準備。這個專案將成為我們未來所有 Kata 練習的家。
在 Day 9,我們將正式開始我們的第一個 TDD Kata 練習。我們將完全遵循 TDD 的節奏,從最小的需求出發,為 FizzBuzz 問題寫下第一個「注定會失敗」的測試。
在 Day 10,我們將完成我們的第一個 TDD 循環,從紅燈到綠燈,並進行必要的重構。這是 TDD 的核心實踐,讓我們的程式碼在測試的保護下逐步成長。
這篇文章延續前面的 FizzBuzz 練習,展示了如何透過多個完整的 TDD 循環,逐步實現所有 FizzBuzz 邏輯
這篇文章引入了更具挑戰性的 TDD Kata,模擬真實軟體開發中的需求演進
這篇文章實作字串計算機的前兩個基本功能,展現了紮實的 TDD 基礎
這篇文章讓字串計算機真正開始「計算」,處理多個數字的相加
不寫任何程式碼,而是進行一次深度的復盤與問答,我們到底從手動 TDD Kata 中學到了什麼?
從 TDD 的熱情中抽離,以一種務實、客觀的態度,探討 TDD 的限制與權衡,學會做出明智的技術決策。
正式邀請我們的 AI 隊友——GitHub Copilot——加入專案,並為我們的人機協作搭建好舞台。
掌握 TDD 流程中的「AI 詠唱術」(Prompt Engineering),並透過一個全新的微型 Kata,完整地演練一次從需求發想到開發完成的 AI 協作 TDD 流程。
學習如何利用 AI,來強化我們 TDD 循環中的「重構」與「測試完備性」。
進行一次迄今為止最真實的 AI TDD 實戰演練!我們將使用流行的 Gin 框架,從零開始,完整地開發一個簡單的 HTTP API 端點。
學習如何利用 AI 的窮舉能力,扮演我們的「對抗性陪練」,幫助我們找到並測試那些容易被忽略的邊界條件。
學習如何利用 AI,幫助我們輕鬆地編寫併發測試,並使用 TDD 的方式,來修復併發場景下的競爭條件 Bug。
學習一項能在遺留程式碼的泥潭中殺出重圍的關鍵技能——編寫「特性測試」(Characterization Tests),並利用 AI 來極大地加速這個「程式碼考古」的過程。
將我們的視角從 開發維度 提升到 業務維度,引入 TDD 的近親——驗收測試驅動開發 (ATDD),並學習一種能讓業務、QA 和開發者都能溝通的「共同語言」。
完成 ATDD 的後半部分,將業務描述與真實的程式碼邏輯連接起來,並點亮最終的綠燈!
為「購物車折扣」功能,完成 ATDD 的前半部分工作 —— 定義需求,並讓 godog 引導我們下一步該做什麼。
跳出程式碼,從一個行業參與者的角度,探討在專業開發中使用 AI 時,我們必須面對的幾個關鍵議題。
以第一人稱的視角,體驗一位開發者在 AI 協作模式下,高效、穩健地度過一個典型的工作日 (大家就當看故事就好)。
最基本的問題開始:「到底什麼是測試驅動開發?」