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

Ответ

Один тест проверяет много кейсов: слайс структур с входом и ожидаемым результатом, цикл по кейсам и вызов t.Run(tc.name, ...). Удобно добавлять кейсы и избегать дублирования. Имена кейсов делают осмысленными для отчета.

func TestAdd(t *testing.T) {
    cases := []struct{ a, b, want int }{
        {1, 2, 3}, {0, 0, 0}, {-1, 1, 0},
    }
    for _, tc := range cases {
        t.Run(fmt.Sprintf("%d+%d", tc.a, tc.b), func(t *testing.T) {
            if got := Add(tc.a, tc.b); got != tc.want {
                t.Errorf("got %d; want %d", got, tc.want)
            }
        })
    }
}
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.