mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-02-19 04:33:11 +08:00
2.8 KiB
2.8 KiB
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 測試模式。
此指令的功能
- 定義類型/介面:先建立函式簽名骨架
- 撰寫表格驅動測試:建立全面的測試案例(RED)
- 執行測試:驗證測試因正確的原因失敗
- 實作程式碼:撰寫最小程式碼使其通過(GREEN)
- 重構:在測試保持綠色的同時改進
- 檢查覆蓋率:確保 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/