Паттерн организации тестов через таблицу кейсов — стандарт в Go:
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},
{"mixed", -1, 5, 4},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := Add(tt.a, tt.b)
if got != tt.expected {
t.Errorf("Add(%d, %d) = %d, want %d",
tt.a, tt.b, got, tt.expected)
}
})
}
}
Преимущества:
- Легко добавлять новые кейсы (одна строка)
t.Runсоздаёт sub-test — можно запускать по имени:go test -run TestAdd/negative- Меньше дублирования кода
- Можно добавить
t.Parallel()для параллельного запуска sub-tests