Какие знаешь типы тестов

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

Ответ

В Go тесты делятся на несколько типов:

  1. Unit-тесты - тестируют отдельные функции/методы. Используют пакет testing:
func TestAdd(t *testing.T) {
    result := Add(2, 3)
    if result != 5 {
        t.Errorf("Expected 5, got %d", result)
    }
}
  1. Примеры (Examples) - тесты с выводом, проверяют документацию:
func ExampleAdd() {
    fmt.Println(Add(2, 3))
    // Output: 5
}
  1. Benchmark-тесты - измеряют производительность:
func BenchmarkAdd(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Add(2, 3)
    }
}
  1. Интеграционные тесты - проверяют взаимодействие компонентов (обычно в отдельных файлах с тегами integration)

  2. Table-driven тесты - популярный шаблон для unit-тестов с набором входных/выходных данных:

func TestAdd(t *testing.T) {
    tests := []struct {
        a, b, want int
    }{
        {2, 3, 5},
        {0, 0, 0},
        {-1, 1, 0},
    }
    for _, tt := range tests {
        if got := Add(tt.a, tt.b); got != tt.want {
            t.Errorf("Add(%d, %d) = %d, want %d", tt.a, tt.b, got, tt.want)
        }
    }
}