Что такое table-driven tests?

Middle
1.3k просмотров
AFK Offer AI

Паттерн организации тестов через таблицу кейсов — стандарт в 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

Следующий вопрос

Что такое горутинная утечка и как её найти?