Files
everything-claude-code/docs/zh-TW/commands/go-test.md
Dave Lin c3430bdc8a docs: add Traditional Chinese translation
Complete Traditional Chinese (zh-TW) translation of documentation
2026-01-28 23:06:29 -08:00

2.8 KiB
Raw Blame History

description
description
Enforce TDD workflow for Go. Write table-driven tests first, then implement. Verify 80%+ coverage with go test -cover.

Go TDD 指令

此指令強制執行 Go 程式碼的測試驅動開發方法論,使用慣用的 Go 測試模式。

此指令的功能

  1. 定義類型/介面:先建立函式簽名骨架
  2. 撰寫表格驅動測試建立全面的測試案例RED
  3. 執行測試:驗證測試因正確的原因失敗
  4. 實作程式碼撰寫最小程式碼使其通過GREEN
  5. 重構:在測試保持綠色的同時改進
  6. 檢查覆蓋率:確保 80% 以上覆蓋率

何時使用

在以下情況使用 /go-test

  • 實作新的 Go 函式
  • 為現有程式碼新增測試覆蓋率
  • 修復 Bug先撰寫失敗的測試
  • 建構關鍵商業邏輯
  • 學習 Go 中的 TDD 工作流程

TDD 循環

RED     → 撰寫失敗的表格驅動測試
GREEN   → 實作最小程式碼使其通過
REFACTOR → 改進程式碼,測試保持綠色
REPEAT  → 下一個測試案例

測試模式

表格驅動測試

tests := []struct {
    name     string
    input    InputType
    want     OutputType
    wantErr  bool
}{
    {"case 1", input1, want1, false},
    {"case 2", input2, want2, true},
}

for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        got, err := Function(tt.input)
        // 斷言
    })
}

平行測試

for _, tt := range tests {
    tt := tt // 擷取
    t.Run(tt.name, func(t *testing.T) {
        t.Parallel()
        // 測試內容
    })
}

測試輔助函式

func setupTestDB(t *testing.T) *sql.DB {
    t.Helper()
    db := createDB()
    t.Cleanup(func() { db.Close() })
    return db
}

覆蓋率指令

# 基本覆蓋率
go test -cover ./...

# 覆蓋率 profile
go test -coverprofile=coverage.out ./...

# 在瀏覽器檢視
go tool cover -html=coverage.out

# 依函式顯示覆蓋率
go tool cover -func=coverage.out

# 帶競態偵測
go test -race -cover ./...

覆蓋率目標

程式碼類型 目標
關鍵商業邏輯 100%
公開 API 90%+
一般程式碼 80%+
產生的程式碼 排除

TDD 最佳實務

應該做:

  • 在任何實作前先撰寫測試
  • 每次變更後執行測試
  • 使用表格驅動測試以獲得全面覆蓋
  • 測試行為,不是實作細節
  • 包含邊界情況空值、nil、最大值

不應該做:

  • 在測試之前撰寫實作
  • 跳過 RED 階段
  • 直接測試私有函式
  • 在測試中使用 time.Sleep
  • 忽略不穩定的測試

相關指令

  • /go-build - 修復建置錯誤
  • /go-review - 實作後審查程式碼
  • /verify - 執行完整驗證迴圈

相關

  • 技能:skills/golang-testing/
  • 技能:skills/tdd-workflow/