الاختبارات المعتمدة على الجداول
اختبارات ذات معاملات باستخدام الاختبارات الفرعية
الاختبارات المعتمدة على الجداول درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما الاختبارات المعتمدة على الجداول؟
تعرّف الاختبارات المعتمدة على الجداول شريحةً من حالات الاختبار (مدخلات ومخرجات متوقعة)، ثم تكرّر عليها باستخدام جسم اختبار واحد. وهي تقلل التكرار وتجعل إضافة الحالات أمرًا بسيطًا.
النمط الأساسي
عرّف بنيةً لكل حالة، وكرّر عليها باستخدام t.Run، وأبلغ عن حالات الفشل باسم الحالة:
tests := []struct {
name string
input int
want int
}{
{"zero", 0, 0},
{"positive", 3, 9},
{"negative", -2, 4},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := Square(tt.input)
if got != tt.want {
t.Errorf("Square(%d) = %d; want %d", tt.input, got, tt.want)
}
})
}شريحة البنى المجهولة
استخدم بنيةً مجهولة لنوع حالة الاختبار — فهذا يُبقي تعريف الحالة قريبًا من الاختبار، ويجنبك تسمية نوع لا يُستخدم إلا مرة واحدة.
تضمين حالات الخطأ
أضف الحقل wantErr bool لاختبار أن الدوال تعيد أخطاءً في السيناريوهات المتوقعة:
{"invalid input", -1, 0, true},
// in the loop:
if (err != nil) != tt.wantErr {
t.Errorf("wantErr %v, got err %v", tt.wantErr, err)
}تسمية الاختبارات الفرعية
يجعل حقل الاسم الوصفي حالات الفشل واضحة بذاتها. ويمكنك تشغيل حالة محددة باستخدام -run TestFunc/case_name.
الاختبارات الفرعية المتوازية باستخدام t.Run
حدّد كل اختبار فرعي ليعمل بالتوازي، واحفظ متغير الحلقة لتشغيل الحالات بشكل متزامن (وهذا مهم عندما تكون الاختبارات مرتبطة بعمليات الإدخال والإخراج).
for _, tt := range tests {
tt := tt // capture
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
// ...
})
}إعداد مشترك لكل حالة
استخدم حقول الدوال tt.setup للسماح بإعداد خاص بكل حالة من دون تكرار الشيفرة التمهيدية:
type tc struct {
setup func() *DB
input string
want int
}الحفاظ على وضوح الحالات
إذا كبرت الحالات، فعرّفها كمتغيرات مسماة أو حمّلها من ملفات testdata. حافظ على إيجاز الجدول — سطر واحد لكل حالة متى أمكن.
اختبار مخرجات متعددة
اختبر دوال الجداول التي تعيد قيمًا متعددة بإضافة حقل لكل مخرج:
type tc struct {
input string
wantVal int
wantErr bool
}استخدام Testify assert في الجداول
استخدم github.com/stretchr/testify/assert داخل الاختبارات المعتمدة على الجداول للحصول على تأكيدات واضحة من دون كتل if/t.Errorf مطوّلة.
assert.Equal(t, tt.want, got, tt.name)التوثيق باستخدام الحالات
يعمل جدول الحالات بوصفه توثيقًا حيًا. وسيقرأه المطورون مستقبلًا لفهم جميع المدخلات المدعومة والحالات الحدّية بسرعة.
تحقق سريع
لماذا تحفظ متغير الحلقة (tt := tt) قبل t.Parallel في الاختبارات المعتمدة على الجداول؟
خلاصة: الاختبارات المعتمدة على الجداول
النقاط الأساسية:
- شريحة من البنى تغطي المدخلات والمخرجات المتوقعة ومؤشر الخطأ
- التكرار باستخدام t.Run لإنشاء اختبارات فرعية مسماة ومستقلة
- احفظ متغير الحلقة (tt := tt) قبل t.Parallel
- تعمل الحالات توثيقًا حيًا للسلوكيات المدعومة
الأسئلة الشائعة
هل درس «الاختبارات المعتمدة على الجداول» مجاني؟
نعم — نص درس «الاختبارات المعتمدة على الجداول» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «الاختبارات المعتمدة على الجداول»؟
اختبارات ذات معاملات باستخدام الاختبارات الفرعية تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الاختبارات المعتمدة على الجداول»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كتابة اختبارات الوحدات باستخدام testing
- الاختبارات المعتمدة على الجداول
- بدائل الاختبار: Mocks وStubs
- تغطية الاختبار وtestify