Files
everything-claude-code-zh/docs/zh-TW/commands/go-test.md

133 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 → 下一個測試案例
```
## 測試模式
### 表格驅動測試
```go
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)
// 斷言
})
}
```
### 平行測試
```go
for _, tt := range tests {
tt := tt // 擷取
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
// 測試內容
})
}
```
### 測試輔助函式
```go
func setupTestDB(t *testing.T) *sql.DB {
t.Helper()
db := createDB()
t.Cleanup(func() { db.Close() })
return db
}
```
## 覆蓋率指令
```bash
# 基本覆蓋率
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/`