كتابة اختبارات الوحدات باستخدام testing
دوال TestXxx وt.Error وt.Fatal وt.Helper
كتابة اختبارات الوحدات باستخدام testing درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
حزمة testing
توفر حزمة testing المضمّنة في Go كل ما يلزم لاختبارات الوحدة: دوال الاختبار، والإبلاغ عن حالات الفشل، وملفات الاختبار التنفيذية. ولا حاجة إلى إطار عمل خارجي.
توقيع دالة الاختبار
يجب أن تبدأ دوال الاختبار بـ Test، وأن تقبل *testing.T، وأن تكون في ملفات تنتهي بـ _test.go.
func TestAdd(t *testing.T) {
got := Add(2, 3)
if got != 5 {
t.Errorf("Add(2,3) = %d; want 5", got)
}
}t.Error مقابل t.Fatal
تضع t.Error علامة فشل وتتابع التنفيذ، بينما تضع t.Fatal علامة فشل وتوقف الاختبار الحالي فورًا. استخدم Fatal عندما تعتمد التأكيدات اللاحقة على التأكيد الذي فشل.
تشغيل الاختبارات
شغّل جميع الاختبارات: go test ./.... لتشغيل اختبار محدد: go test -run TestAdd. أضف -v للحصول على مخرجات تفصيلية.
go test -v -run TestAdd ./...t.Helper
حدّد دوال المساعدة الخاصة بالتأكيدات باستخدام t.Helper() حتى تعرض رسائل الخطأ سطر المستدعي، لا سطر دالة المساعدة.
func assertEqual(t *testing.T, got, want int) {
t.Helper()
if got != want {
t.Errorf("got %d; want %d", got, want)
}
}TestMain
تُعد TestMain(m *testing.M) نقطة دخول اختيارية لإعداد البيئة وتنظيفها قبل تشغيل مجموعة الاختبارات كاملة وبعده (مثل بدء قاعدة بيانات للاختبار).
func TestMain(m *testing.M) {
setup()
code := m.Run()
teardown()
os.Exit(code)
}الاختبارات الفرعية باستخدام t.Run
جمّع الحالات المرتبطة باستخدام t.Run. يعمل كل اختبار فرعي بشكل مستقل، ويمكن استهدافه باستخدام -run TestFoo/SubcaseName.
func TestMath(t *testing.T) {
t.Run("addition", func(t *testing.T) { /* ... */ })
t.Run("subtraction", func(t *testing.T) { /* ... */ })
}بنية ملفات الاختبار
يمكن للاختبارات الموجودة في الحزمة نفسها الوصول إلى المعرّفات غير المصدّرة. أما الاختبارات الموجودة في حزمة _test (اختبارات الصندوق الأسود)، فلا يمكنها الوصول إلا إلى المعرّفات المصدّرة.
// white-box: package mylib
// black-box: package mylib_testgo test -cover
قِس تغطية الشيفرة باستخدام go test -cover. ولإنشاء تقرير HTML مفصل: go test -coverprofile=c.out ./... && go tool cover -html=c.out.
الاختبار باستخدام الواجهات
صمّم الشيفرة اعتمادًا على الواجهات حتى تتمكن الاختبارات من تمرير تطبيقات وهمية من دون تشغيل خدمات حقيقية.
t.Parallel
استدعِ t.Parallel() في بداية الاختبار لتمييزه بأنه آمن للتشغيل بالتزامن مع اختبارات متوازية أخرى، مما يسرّع مجموعة الاختبارات.
func TestRead(t *testing.T) {
t.Parallel()
// ...
}تحقق سريع
ما الفرق بين t.Error وt.Fatal؟
خلاصة: اختبار الوحدة باستخدام testing
النقاط الأساسية:
- دوال الاختبار: TestXxx(t *testing.T) في ملفات _test.go
- يتابع t.Error التنفيذ، بينما يوقف t.Fatal الاختبار
- استخدم t.Helper() للحصول على أرقام أسطر واضحة للأخطاء في دوال المساعدة
- استخدم t.Run للاختبارات الفرعية، وt.Parallel للاختبارات المتزامنة
الأسئلة الشائعة
هل درس «كتابة اختبارات الوحدات باستخدام testing» مجاني؟
نعم — نص درس «كتابة اختبارات الوحدات باستخدام testing» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «كتابة اختبارات الوحدات باستخدام testing»؟
دوال TestXxx وt.Error وt.Fatal وt.Helper تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «كتابة اختبارات الوحدات باستخدام testing»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- كتابة اختبارات الوحدات باستخدام testing
- الاختبارات المعتمدة على الجداول
- بدائل الاختبار: Mocks وStubs
- تغطية الاختبار وtestify