الاختبارات الجدولية
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
Output:
الاختبارات الفرعية — Subtests مع t.Run
t.Run يُنشئ اختبارات فرعية مُسمّاة — مفيد للتصفية والتنظيم:
main.go
Output:
تغطية الكود — Test Coverage
main.go
Output:
نصائح للاختبارات الجدولية
- سمّ الحالات — يسهّل التصحيح عند الفشل
- غطّ الحالات الحدّية — صفر، سالب، فارغ، nil
- حالة واحدة = سلوك واحد — لا تخلط
- الترتيب لا يهم — كل حالة مستقلة
تحدي — Challenge
اكتب FizzBuzz ثم اختبرها بجدول