Go 測試模式
用於撰寫可靠、可維護測試的完整 Go 測試模式,遵循 TDD 方法論。
何時啟用
- 撰寫新的 Go 函式或方法
- 為現有程式碼增加測試覆蓋率
- 為效能關鍵程式碼建立基準測試
- 實作輸入驗證的模糊測試
- 在 Go 專案中遵循 TDD 工作流程
Go 的 TDD 工作流程
RED-GREEN-REFACTOR 循環
RED → 先寫失敗的測試
GREEN → 撰寫最少程式碼使測試通過
REFACTOR → 在保持測試綠色的同時改善程式碼
REPEAT → 繼續下一個需求
Go 中的逐步 TDD
// 步驟 1:定義介面/簽章
// calculator.go
package calculator
func Add(a, b int) int {
panic("not implemented") // 佔位符
}
// 步驟 2:撰寫失敗測試(RED)
// calculator_test.go
package calculator
import "testing"
func TestAdd(t *testing.T) {
got := Add(2, 3)
want := 5
if got != want {
t.Errorf("Add(2, 3) = %d; want %d", got, want)
}
}
// 步驟 3:執行測試 - 驗證失敗
// $ go test
// --- FAIL: TestAdd (0.00s)
// panic: not implemented
// 步驟 4:實作最少程式碼(GREEN)
func Add(a, b int) int {
return a + b
}
// 步驟 5:執行測試 - 驗證通過
// $ go test
// PASS
// 步驟 6:如需要則重構,驗證測試仍然通過
表格驅動測試
Go 測試的標準模式。以最少程式碼達到完整覆蓋。
func TestAdd(t *testing.T) {
tests := []struct {
name string
a, b int
expected int
}{
{"positive numbers", 2, 3, 5},
{"negative numbers", -1, -2, -3},
{"zero values", 0, 0, 0},
{"mixed signs", -1, 1, 0},
…