الاختبار في مسار Go

تعلّم كيفية اختبار تمارين Go الخاصة بك على Exercism


يمكن تشغيل تمارين Go الموجودة داخل دليل مشروعك في exercism بالانتقال إلى دليل التمرين وتشغيل go test.

cd exercism/project/directory/go/leap
go test

اختبارات مع كاشف تسابق البيانات

بالإضافة إلى تشغيل go test، ينبغي تشغيل بعض التمارين مع علامة كاشف تسابق البيانات للتأكد من أن حلك لا يحتوي على bug ناتجة عن تسابق البيانات. ستجد تذكيرًا بتشغيل الاختبارات مع علامة كاشف تسابق البيانات -race في التمارين المعنية. شغّل go test -race للتحقق من تسابق البيانات. على سبيل المثال:

cd exercism/project/directory/go/bank-account
go test -race

تشغيل مقاييس الأداء

تحتوي معظم التمارين على مقاييس أداء يمكنك استخدامها لتحديد كيف تؤثر التغييرات في حلك على أدائه. لتشغيل مقاييس الأداء لتمرين ما، استخدم الأمر go test -v --bench . --benchmem داخل دليل التمرين.

تأمّل هذا الإخراج.

BenchmarkReverse-16       403594              2537 ns/op             176 B/op         34 allocs/op

هذا يعني أن مقياس الأداء أجرى 403594 تكرارًا ليُقاس زمنه بموثوقية. كان متوسط السرعة 2537 ns لكل حلقة. حدث 34 تخصيصًا للذاكرة لكل عملية بمتوسط 176 بايت.

أمثلة قابلة للاختبار

تُستخدم أمثلة الاختبار في بعض التمارين وتُشغَّل إلى جانب اختبارات التمرين القياسية. تُستخدم هذه الأمثلة لتوثيق API التمرين والتحقق منه، وقد تكون مفيدة في تحديد ما هي API المتوقعة للتمرين.

Go fmt

يرجى تشغيل go fmt على كودك قبل إرساله.

تلميحات ونصائح

كتابة كود التمرين

يعطي ملف README.md لكل تمرين وصفًا عامًا، لكن برنامج اختبار Go سيكون دقيقًا جدًا. افتح برنامج الاختبار وألقِ عليه نظرة سريعة، وإن بدا ذلك كالغش فافعله على أي حال. ابحث عن التعليقات المفيدة وبيانات الاختبار، ومجرد أسماء دوال الاختبار. جرّب تشغيل go test قبل أن تكتب أي شيء وانظر ما إذا كانت رسائل الخطأ تعطيك فكرة عن أين تبدأ.

هدفك الأول هو الحصول على كود يُترجم، حتى لو فشل في الاختبارات. ولهذا، ينبغي أن تضع "هيكلًا" للدوال. هذا يعني أن تترك جسم الدالة فارغًا، باستثناء ما يجب أن تُرجعه. اكتب return 0 أو return "" أو أي شيء فقط لكي يُترجم الكود. أحيانًا، لمعرفة توقيعات الدوال، ستحتاج إلى العودة إلى برنامج الاختبار وقراءته بمزيد من التفصيل. بمجرد أن تعرف كل توقيعات الدوال المطلوبة، سيشتكي برنامج الاختبار من أن 0 إجابة خاطئة. الآن ابدأ بتعبئة أجسام الدوال.

إصلاح الأخطاء

غالبًا ما تتوقف الاختبارات عند أول خطأ. أصلح ذلك الخطأ، وكرّر حتى لا تبقى أخطاء. لـ go test خيارات مفيدة. سيعطيك go test -v إخراجًا أكثر تفصيلًا. وسيشغّل go test -run <regexp> الاختبارات التي تطابق أسماؤها <regexp> فقط.

تنتج حالات الذعر الكثير من الإخراج. قد يبدو الأمر مخيفًا في البداية، لكن كن شجاعًا. انظر إلى أعلى الإخراج الناتج عن حالة الذعر بحثًا عن رسالة الذعر. سيعطيك ذلك وصفًا عامًا للمشكلة. ثم اقرأ باقيه بحثًا عن أول إشارة إلى الكود الخاص بك. غالبًا ما سيشير ذلك مباشرة إلى المشكلة.

للعثور على المشكلات في البرامج المتزامنة، جرّب go test -race.

تنظيف الكود

لنُكرّر ذلك مرة أخرى: شغّل go fmt. يمكن أن يخبرك Golint بمشكلات في أسلوب كودك لا يلتقطها go fmt. قد تُلقي نظرة أيضًا على go vet، الذي يحذّرك من مشكلات محتملة في كودك. اقرأ التعليقات المتكررة في مراجعات الكود واعمل بها. بالنسبة لتمرين يتضمن تزامنًا، جرّب go test -race حتى إن نجح في اختباراته. ضع قابلية القراءة في اعتبارك حتى إن كنت تُحسّن الأداء وفق المقاييس. أحيانًا يمكن أن يساعدك التحسين على اكتشاف حلول موجزة وقابلة للقراءة، لكن قد يكون هناك إغراء بالتخلي عن قابلية القراءة سعيًا وراء الأداء.

اختبارات إضافية

تحتوي بعض التمارين على اختبارات إضافية لا تُشغَّل بمجرد go test. إذا كنت تحل التمرين الإضافي بالإضافة إلى التمرين العادي، فسيتعين عليك كتابة go test -tags bonus، أو أمر مشابه كما هو مذكور في توثيق برنامج الاختبار.