AzLearn

الاختبارات الجدولية

Table-Driven Tests

مفهوم ~18 دقيقة

الاختبارات الجدولية — Table-Driven Tests

الاختبارات الجدولية هي نمط Go المميز (idiomatic) — ستجده في كل مشروع Go احترافي، بما في ذلك الكود المصدري لـ Go نفسها. الفكرة: بدلاً من كتابة دالة اختبار لكل حالة، تضع كل الحالات في جدول وتتكرر عليها.

لماذا الاختبارات الجدولية؟

// ❌ بدون جدول — تكرار ممل
func TestAdd1(t *testing.T) {
    if Add(1, 2) != 3 { t.Error("failed") }
}
func TestAdd2(t *testing.T) {
    if Add(0, 0) != 0 { t.Error("failed") }
}
func TestAdd3(t *testing.T) {
    if Add(-1, 1) != 0 { t.Error("failed") }
}

// ✅ مع جدول — نظيف وقابل للتوسع
func TestAdd(t *testing.T) {
    tests := []struct{ a, b, want int }{
        {1, 2, 3},
        {0, 0, 0},
        {-1, 1, 0},
    }
    for _, tt := range tests {
        got := Add(tt.a, tt.b)
        if got != tt.want {
            t.Errorf("Add(%d, %d) = %d, want %d", tt.a, tt.b, got, tt.want)
        }
    }
}

مثال كامل

main.go

الاختبارات الفرعية — Subtests مع t.Run

t.Run يُنشئ اختبارات فرعية مُسمّاة — مفيد للتصفية والتنظيم:

main.go

تغطية الكود — Test Coverage

main.go

نصائح للاختبارات الجدولية

  1. سمّ الحالات — يسهّل التصحيح عند الفشل
  2. غطّ الحالات الحدّية — صفر، سالب، فارغ، nil
  3. حالة واحدة = سلوك واحد — لا تخلط
  4. الترتيب لا يهم — كل حالة مستقلة
تحدي — Challenge