Go TDD 指令¶
此指令強制執行 Go 程式碼的測試驅動開發方法論,使用慣用的 Go 測試模式。
此指令的功能¶
- 定義類型/介面:先建立函式簽名骨架
- 撰寫表格驅動測試:建立全面的測試案例(RED)
- 執行測試:驗證測試因正確的原因失敗
- 實作程式碼:撰寫最小程式碼使其通過(GREEN)
- 重構:在測試保持綠色的同時改進
- 檢查覆蓋率:確保 80% 以上覆蓋率
何時使用¶
在以下情況使用 /go-test:
- 實作新的 Go 函式
- 為現有程式碼新增測試覆蓋率
- 修復 Bug(先撰寫失敗的測試)
- 建構關鍵商業邏輯
- 學習 Go 中的 TDD 工作流程
TDD 循環¶
測試模式¶
表格驅動測試¶
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/
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC