Go: Автоматическое тестирование
Теория: Библиотека testify: ассерты и моки
В стандартном пакете testing проверки строятся вокруг выражений вида if got != want { t.Errorf(...) }. Это надёжный способ, но при большом количестве тестов он делает код громоздким и плохо читаемым. Чтобы сделать тесты короче и понятнее, в Go часто используют библиотеку testify. Она предоставляет два основных инструмента:
- Набор функций для удобных проверок — ассерты (
assert) и жёсткие проверки (require). \ - Пакет для создания и настройки моков (
mock).
Ассерты
Ассерты — это готовые функции, которые проверяют условие и при его нарушении помечают тест как упавший. Они заменяют ручные проверки и делают код лаконичным.
Простейший пример:
Раньше здесь пришлось бы писать условие и выводить сообщение через t.Errorf. Теперь тест читается как простое утверждение.
Проверки со строками
Ассерты особенно удобны при работе со строками.
Код остаётся компактным и легко читается.
Проверки ошибок
Вместо ручных сравнений удобно использовать ассерты для ошибок.
Результат тот же, но код проще и яснее.
assert и require
В testify есть два вида проверок:
assertсообщает об ошибке, но позволяет тесту продолжить выполнение.requireостанавливает тест сразу, какt.Fatal.
Часто используют комбинацию: сначала критические условия проверяют через require, а уточняющие детали — через assert.
Табличные тесты
Ассерты хорошо подходят для табличных тестов, где проверяется много входных данных.
Каждая проверка выражается одной строкой, а сообщения об ошибках показывают, для какого случая тест провалился.
Проверки структур и коллекций
Testify умеет сравнивать структуры, срезы и карты без дополнительного кода.
Есть отдельные функции для проверки JSON, подмножеств и времени (assert.JSONEq, assert.Subset, assert.WithinDuration).
Моки
Вторая часть testify — это пакет mock, позволяющий создавать поддельные зависимости. Вместо того чтобы писать собственные реализации интерфейсов, можно объявить мок и настраивать его прямо в тесте.
Пример: сервис зависит от хранилища пользователей.
Мок на testify:
Тест с использованием мока:
Моки можно настраивать для разных входов и разных сценариев:
Также есть возможность проверять все ожидаемые вызовы через m.AssertExpectations(t).
Библиотека testify решает две основные задачи:
- Ассерты (
assertиrequire) делают проверки короче и понятнее. - Моки (
mock) позволяют удобно подменять зависимости и контролировать их вызовы.
Использование testify делает тесты более выразительными и поддерживаемыми. Вместо длинных условий и повторяющегося кода остаются простые и понятные утверждения, которые показывают суть проверки.



