Ответ
Фикстуры (англ. fixtures) — это заранее подготовленный, фиксированный набор данных и состояний, используемый для проведения тестов. Их главная цель — создать консистентное и предсказуемое окружение перед каждым тестовым запуском.
Это позволяет изолировать тестируемую логику от внешних зависимостей (например, от состояния реальной базы данных) и гарантировать воспроизводимость результатов тестов.
Способы реализации в Go:
- Встроенные переменные: Простые структуры, срезы или мапы, объявленные прямо в тестовом файле.
- Файлы с данными: Данные в форматах JSON, YAML, CSV, которые читаются во время теста. В Go для этого принято использовать специальную директорию
testdata
внутри пакета. - Библиотеки для работы с БД: Инструменты вроде
go-sqlmock
для мокирования запросов к БД илиtestfixtures
для загрузки данных в тестовую базу данных перед запуском тестов.
Пример (встроенная фикстура):
// user_repository_test.go
// Фикстура с тестовыми пользователями
var testUsers = []User{
{ID: 1, Name: "Alice"},
{ID: 2, Name: "Bob"},
}
func TestGetUser(t *testing.T) {
// Используем фикстуру для инициализации репозитория
repo := &InMemoryUserRepository{users: testUsers}
user, err := repo.GetUser(1)
if err != nil || user.Name != "Alice" {
t.Errorf("GetUser(1) failed: expected Alice, got %v", user)
}
}
Плюсы:
- Воспроизводимость: Тесты всегда выполняются в одинаковых условиях.
- Изоляция: Тесты не зависят от внешних сервисов или состояния "живой" БД.
- Простота: Упрощает написание и понимание тестовых сценариев.
Минусы:
- Поддержка: Фикстуры нужно обновлять при изменении моделей данных.
- Избыточность: Большое количество фикстур может усложнить поддержку тестового набора.