Ответ
Тестирование в Go встроено в язык и инструментарий. Основные инструменты — это пакет testing
и команда go test
.
Файлы с тестами должны иметь суффикс _test.go
(например, sum_test.go
) и находиться в том же пакете, что и тестируемый код.
Основные компоненты пакета testing
:
-
Unit-тесты (
TestXxx
): Проверяют корректность работы отдельных функций или методов. Функция теста принимаетt *testing.T
.// Файл: sum.go func Sum(a, b int) int { return a + b } // Файл: sum_test.go func TestSum(t *testing.T) { result := Sum(2, 3) expected := 5 if result != expected { t.Errorf("Sum(2, 3) = %d; ожидалось %d", result, expected) } }
-
Бенчмарки (
BenchmarkXxx
): Измеряют производительность кода. Функция теста принимаетb *testing.B
.func BenchmarkSum(b *testing.B) { for i := 0; i < b.N; i++ { Sum(1, 2) } }
-
Fuzz-тестирование (
FuzzXxx
): Автоматически генерирует входные данные для поиска пограничных случаев и уязвимостей (добавлено в Go 1.18).
Виды тестирования по уровню:
- Модульное (Unit): Изолированная проверка наименьших частей кода (функций, методов).
- Интеграционное: Проверка взаимодействия нескольких компонентов системы (например, сервис и база данных).
- End-to-End (E2E): Тестирование полного пользовательского сценария через внешние интерфейсы системы (например, через API).
Популярные сторонние библиотеки:
testify/assert
иtestify/require
: Предоставляют удобные функции-утверждения для проверок.assert
сообщает об ошибке и продолжает выполнение теста,require
— останавливает.gomock
: Фреймворк для создания мок-объектов (заглушек) на основе интерфейсов.