Ответ
В Go существует мощная встроенная поддержка тестирования, дополненная популярными сторонними библиотеками.
1. Стандартная библиотека testing
Это основа для всех видов тестов в Go.
- Юнит-тесты: Файлы
_test.go
и функции видаfunc TestMyFunction(t *testing.T)
. Часто используется паттерн table-driven tests для проверки функции на множестве входных данных. - Бенчмарки: Функции вида
func BenchmarkMyFunction(b *testing.B)
для измерения производительности кода. - Примеры: Функции вида
func ExampleMyFunction()
для демонстрации использования API, которые также проверяются во время тестов.
2. Популярные сторонние библиотеки
-
testify/assert
иtestify/require
Предоставляют более удобные и читаемые функции для проверок (assertions).assert
продолжает выполнение теста после ошибки, аrequire
немедленно его останавливает.import ( "testing" "github.com/stretchr/testify/assert" ) func TestAdd(t *testing.T) { result := Add(2, 3) // Проверка на равенство assert.Equal(t, 5, result, "Сумма должна быть равна 5") }
-
testify/mock
иgomock
Инструменты для создания моков (mock objects) — заглушек для зависимостей (например, баз данных или внешних API).testify/mock
требует ручного написания моков, аgomock
от Google умеет генерировать их на основе интерфейсов. -
net/http/httptest
Пакет из стандартной библиотеки, незаменимый для тестирования HTTP-хендлеров без запуска реального веб-сервера. Он позволяет создавать фейковые запросы (httptest.NewRequest
) и записывать ответы (httptest.NewRecorder
).