Какие инструменты и пакеты используются для тестирования в Go?

Ответ

В 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).