Тестирование#

Как тестируют на Go: table-driven тесты, моки без магии, -race, бенчмарки, fuzzing и интеграционные тесты в Docker.

Оглавление#

Статьи идут в порядке чтения: от базы к деталям. Всего 7 статей.

  • Table-driven тесты, subtests и параллельность — Table-driven тест — это список «вход → ожидаемый результат» и один цикл, который прогоняет через проверяемую функцию все строки списка.
  • testify, assert/require и golden files — Во встроенном пакете тестирования Go нет ассертов: тест сам сравнивает значения и зовёт t.Errorf, если не сошлось.
  • Моки, стабы и тестируемость — Мок — подставная реализация зависимости, которую тест подсовывает коду вместо настоящей базы данных или HTTP-клиента.
  • Покрытие, -race и флаки-тесты — Покрытие показывает, какие строки кода исполнялись во время тестов.
  • Бенчмарки в Go — Бенчмарк — функция, которая крутит измеряемый код b.N раз, причём b.N подбирает сам Go: увеличивает, пока замер не станет достаточно длинным, чтобы ему…
  • Нативный fuzzing в Go (1.18+) — Фаззинг — автоматическая генерация входных данных в попытке уронить твой код.
  • Интеграционные тесты, testcontainers-go, TestMain — Интеграционный тест проверяет код против настоящей базы, а не против мока.