Go
Таблично-ориентированные тесты
Стандартный для 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 ./...