golang-testing
3
总安装量
2
周安装量
#60168
全站排名
安装命令
npx skills add https://github.com/caijiatao/skills --skill golang-testing
Agent 安装分布
opencode
2
kilo
2
gemini-cli
2
claude-code
2
github-copilot
2
codex
2
Skill 文档
Go æµè¯æ¨¡å¼
ç¨äºç¼åå¯é ãå¯ç»´æ¤æµè¯ç宿´ Go æµè¯æ¨¡å¼ï¼éµå¾ª TDD æ¹æ³è®ºã
使¶å¯ç¨
- ç¼åæ°ç Go 彿°ææ¹æ³
- ä¸ºç°æä»£ç å¢å æµè¯è¦çç
- 为æ§è½å ³é®ä»£ç 建ç«åºåæµè¯
- å®ç°è¾å ¥éªè¯çæ¨¡ç³æµè¯
- å¨ Go 项ç®ä¸éµå¾ª TDD 工使µç¨
æµè¯æ¨¡å¼
| æ¨¡å¼ | æè¿° | åè |
|---|---|---|
| TDD æ¹æ³è®º | RED-GREEN-REFACTOR å¾ªç¯ | test-tdd |
| è¡¨æ ¼é©±å¨æµè¯ | Go æµè¯çæ 忍¡å¼ | test-table-driven |
| åæµè¯ä¸å¹¶è¡ | ç»ç»ç¸å ³æµè¯ï¼å¹¶è¡æ§è¡ | test-subtests |
| æ¥å£ Mock | ä½¿ç¨æ¥å£è¿è¡ä¾èµæ³¨å ¥å mock | test-mocking |
| åºåæµè¯ | æ§è½æµè¯åå ååæ | test-benchmarks |
| æ¨¡ç³æµè¯ | éæºè¾å ¥æµè¯ä»¥åç°è¾¹çæ åµ | test-fuzzing |
| æµè¯è¦çç | åæä»£ç è¦çæ åµ | test-coverage |
Go ç TDD 工使µç¨
RED â å
åå¤±è´¥çæµè¯
GREEN â ç¼åæå°ä»£ç 使æµè¯éè¿
REFACTOR â å¨ä¿ææµè¯ç»¿è²çåæ¶æ¹å代ç
REPEAT â ç»§ç»ä¸ä¸ä¸ªéæ±
å¿«éåè
åºæ¬æµè¯
func TestAdd(t *testing.T) {
got := Add(2, 3)
want := 5
if got != want {
t.Errorf("Add(2, 3) = %d; want %d", got, want)
}
}
è¡¨æ ¼é©±å¨æµè¯
func TestAdd(t *testing.T) {
tests := []struct {
name string
a, b int
expected int
}{
{"positive", 2, 3, 5},
{"negative", -1, -2, -3},
{"zero", 0, 0, 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := Add(tt.a, tt.b)
if got != tt.expected {
t.Errorf("got %d; want %d", got, tt.expected)
}
})
}
}
åæµè¯ä¸å¹¶è¡
func TestParallel(t *testing.T) {
tests := []struct{ name string }{
{"test1"}, {"test2"}, {"test3"},
}
for _, tt := range tests {
tt := tt
t.Run(tt.name, func(t *testing.T) {
t.Parallel() // å¹¶è¡æ§è¡
// æµè¯ä»£ç ...
})
}
}
åºåæµè¯
func BenchmarkProcess(b *testing.B) {
for i := 0; i < b.N; i++ {
Process()
}
}
æµè¯å½ä»¤
# æ§è¡æææµè¯
go test ./...
# æ§è¡å¸¦è¦çççæµè¯
go test -coverprofile=coverage.out ./...
# æ§è¡å¸¦ç«ææ£æµçæµè¯
go test -race ./...
# æ§è¡åºåæµè¯
go test -bench=. -benchmem ./...
# æ§è¡æ¨¡ç³æµè¯
go test -fuzz=FuzzParseJSON -fuzztime=30s ./...
æä½³å®è·µ
åºè¯¥åç
- å åæµè¯ï¼TDDï¼
- 使ç¨è¡¨æ ¼é©±å¨æµè¯ä»¥è·å¾å®æ´è¦ç
- æµè¯è¡ä¸ºï¼èéå®ç°
- å¨è¾
å©å½æ°ä¸ä½¿ç¨
t.Helper() - 对ç¬ç«æµè¯ä½¿ç¨
t.Parallel() - ç¨
t.Cleanup()æ¸ çèµæº - ä½¿ç¨æè¿°æ å¢çææä¹æµè¯åç§°
ä¸åºè¯¥åç
- ä¸è¦ç´æ¥æµè¯ç§æå½æ°ï¼éè¿å ¬å¼ API æµè¯ï¼
- ä¸è¦å¨æµè¯ä¸ä½¿ç¨
time.Sleep()ï¼ä½¿ç¨ channels ææ¡ä»¶ï¼ - ä¸è¦å¿½ç¥ä¸ç¨³å®æµè¯ï¼ä¿®å¤æç§»é¤å®ä»¬ï¼
- ä¸è¦ mock ææä¸è¥¿ï¼å¯è½æ¶å好鿿µè¯ï¼
- ä¸è¦è·³è¿éè¯¯è·¯å¾æµè¯
è¦ççç®æ
| 代ç ç±»å | ç®æ |
|---|---|
| å ³é®ä¸å¡é»è¾ | 100% |
| å ¬å¼ API | 90%+ |
| ä¸è¬ä»£ç | 80%+ |
| çæç代ç | æé¤ |