Sobes.tech
Назад к вопросам
Senior
3

What testing tools, packages, and approaches are commonly used in Go, and how should they be applied in practice?

Компании, где спрашивали
AndersenAndersen

Ответ от нейросети

sobes.tech AI

В Go для тестирования чаще всего используют стандартный пакет testing, который позволяет писать юнит-тесты и интеграционные тесты.

Основные инструменты и подходы:

  • testing — базовый пакет для написания тестов, бенчмарков и примеров.
  • go test — команда для запуска тестов.
  • Табличные тесты — удобный способ покрыть разные сценарии одним тестом.
  • Mocking — для имитации зависимостей используют библиотеки, например, gomock или testify/mock.
  • testify — набор утилит для удобных утверждений (assert, require) и моков.
  • Покрытие кода — с помощью go test -cover можно измерить, насколько тесты покрывают код.

Практическое применение:

  • Писать тесты сразу при разработке функций.
  • Использовать табличные тесты для проверки разных входных данных.
  • Мокать внешние зависимости, чтобы тесты были изолированы.
  • Писать бенчмарки для критичных по производительности участков.
  • Интеграционные тесты запускать с реальными сервисами или их эмуляторами.

Пример табличного теста:

func TestSum(t *testing.T) {
    tests := []struct {
        name string
        a, b int
        want int
    }{
        {"positive", 2, 3, 5},
        {"zero", 0, 0, 0},
        {"negative", -1, -1, -2},
    }

    for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {
            got := Sum(tt.a, tt.b)
            if got != tt.want {
                t.Errorf("Sum(%d, %d) = %d; want %d", tt.a, tt.b, got, tt.want)
            }
        })
    }
}