💬 Что такое table-driven тесты и как их реализовать в Go?
Table-driven тесты в Go — это метод написания тестов, при котором тестовые кейсы организованы в виде таблицы данных.
Каждая строка таблицы представляет отдельный тестовый кейс с входными данными и ожидаемым результатом. Этот подход позволяет легко добавлять новые тестовые кейсы без необходимости дублирования кода.
📌 Для реализации table-driven тестов в Go обычно используется следующий шаблон:
1. Определяем структуру, которая описывает тестовый кейс, включая входные данные и ожидаемый результат.
2. Создаем срез этих структур, где каждый элемент представляет отдельный тестовый кейс.
3. Используем цикл
4. Внутри цикла вызываем функцию, которую тестируем, и сравниваем результат с ожидаемым значением.
📌 Пример:
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,
что также обеспечивает хорошую организацию вывода тестов и их независимость.