💬 Что такое table-driven тесты и как их реализовать в Go?



Table-driven тесты в Go — это метод написания тестов, при котором тестовые кейсы организованы в виде таблицы данных.



Каждая строка таблицы представляет отдельный тестовый кейс с входными данными и ожидаемым результатом. Этот подход позволяет легко добавлять новые тестовые кейсы без необходимости дублирования кода.



📌 Для реализации table-driven тестов в Go обычно используется следующий шаблон:



1. Определяем структуру, которая описывает тестовый кейс, включая входные данные и ожидаемый результат.

2. Создаем срез этих структур, где каждый элемент представляет отдельный тестовый кейс.

3. Используем цикл for для итерации по срезу тестовых кейсов.

4. Внутри цикла вызываем функцию, которую тестируем, и сравниваем результат с ожидаемым значением.



📌 Пример:



package mypackage



import "testing"



func TestMyFunction(t *testing.T) {

cases := []struct {

name string

input int

want int

}{

{"case1", 1, 2},

{"case2", 2, 4},

// …

}



for _, c := range cases {

t.Run(c.name, func(t *testing.T) {

got := MyFunction(c.input)

if got != c.want {

t.Errorf("MyFunction(%d) == %d, want %d", c.input, got, c.want)

}

})

}

}





MyFunction
— это функция, которую мы тестируем. Для каждого тестового кейса в срезе cases мы запускаем тест, используя t.Run, что также обеспечивает хорошую организацию вывода тестов и их независимость.