Ответ
В Go богатая экосистема для тестирования, которая включает как стандартные инструменты, так и сторонние библиотеки.
Стандартная библиотека и инструментарий
-
Пакет
testing
- Основа для написания тестов в Go. Предоставляет тип
*testing.T
для юнит-тестов,*testing.B
для бенчмарков и*testing.F
для фаззинг-тестов. - Table-Driven Tests (табличные тесты) — популярный паттерн для организации тестов с помощью
testing
.func TestSum(t *testing.T) { result := Sum(2, 3) if result != 5 { t.Errorf("Sum(2, 3) = %d; want 5", result) } }
- Основа для написания тестов в Go. Предоставляет тип
-
Команда
go test
- Запускает тесты. Имеет множество флагов, например:
-v
— подробный вывод.-cover
— расчёт покрытия кода тестами.-race
— включение детектора гонок.-bench=.
— запуск бенчмарков.
- Запускает тесты. Имеет множество флагов, например:
Популярные сторонние библиотеки
-
testify
- Самая популярная библиотека-расширение для стандартного
testing
. assert
: предоставляет удобные функции для проверок (например,assert.Equal(t, 5, result)
). В случае ошибки тест помечается как проваленный, но продолжает выполнение.require
: аналогassert
, но в случае ошибки немедленно останавливает выполнение теста.mock
: мощный инструментарий для создания моков (заглушек).suite
: позволяет группировать тесты в наборы с общимиSetup
иTeardown
функциями.
- Самая популярная библиотека-расширение для стандартного
-
gomock
- Официальный фреймворк для мокирования от команды Go. Генерирует моки на основе интерфейсов, что позволяет тестировать компоненты в изоляции.
-
Ginkgo
иGomega
- Библиотеки для написания тестов в стиле BDD (Behavior-Driven Development).
Ginkgo
— фреймворк для описания тестов (Describe
,It
).Gomega
— библиотека для выразительных проверок (Expect(result).To(Equal(5))
).
Специализированные библиотеки
httptest
(стандартная библиотека): предоставляет утилиты для HTTP-тестирования, например, создание фейковыхhttp.Request
иhttptest.ResponseRecorder
для записи ответа.sqlmock
: библиотека для мокирования взаимодействий с базой данных на уровнеdatabase/sql
.