Что такое фикстуры (fixtures) в тестировании?

Ответ

Фикстуры (англ. 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)
    }
}

Плюсы:

  • Воспроизводимость: Тесты всегда выполняются в одинаковых условиях.
  • Изоляция: Тесты не зависят от внешних сервисов или состояния "живой" БД.
  • Простота: Упрощает написание и понимание тестовых сценариев.

Минусы:

  • Поддержка: Фикстуры нужно обновлять при изменении моделей данных.
  • Избыточность: Большое количество фикстур может усложнить поддержку тестового набора.