Как писать тесты в Go

«Как писать тесты в Go» — вопрос из категории Тестирование, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go тесты пишутся с использованием пакета testing. Тестовые файлы должны заканчиваться на _test.go. Тестовая функция начинается с Test и принимает *testing.T:

func TestSum(t *testing.T) {
    got := Sum(2, 3)
    want := 5
    if got != want {
        t.Errorf("got %d, want %d", got, want)
    }
}

Для табличных тестов используйте циклы:

func TestSumTable(t *testing.T) {
    tests := []struct {
        a, b, want int
    }{
        {1, 2, 3},
        {0, 0, 0},
        {-1, 1, 0},
    }

    for _, tt := range tests {
        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)
        }
    }
}

Для бенчмарков используйте *testing.B:

func BenchmarkSum(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Sum(1, 2)
    }
}

Запуск тестов:

  • go test - запуск всех тестов
  • go test -v - с подробным выводом
  • go test -run TestName - запуск конкретного теста
  • go test -bench . - запуск бенчмарков