Go

Таблично-ориентированные тесты

Algonexys · 07.08.2026 · 👁 0

Стандартный для Go подход: набор случаев, подтесты t.Run и параллельный запуск.

Код

package calc

import "testing"

func Divide(a, b float64) (float64, error) {
	if b == 0 {
		return 0, ErrDivideByZero
	}
	return a / b, nil
}

func TestDivide(t *testing.T) {
	tests := []struct {
		name    string
		a, b    float64
		want    float64
		wantErr bool
	}{
		{"обычное деление", 10, 2, 5, false},
		{"отрицательные", -10, 2, -5, false},
		{"дробный результат", 1, 4, 0.25, false},
		{"деление на ноль", 1, 0, 0, true},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			t.Parallel()
			got, err := Divide(tt.a, tt.b)
			if (err != nil) != tt.wantErr {
				t.Fatalf("Divide(%v, %v) ошибка = %v, ожидалась ошибка = %v",
					tt.a, tt.b, err, tt.wantErr)
			}
			if !tt.wantErr && got != tt.want {
				t.Errorf("Divide(%v, %v) = %v, ожидалось %v", tt.a, tt.b, got, tt.want)
			}
		})
	}
}

// go test -v -race -cover ./...