اختبار الثوابت في Go
في Go، تعد الثوابت أداة قيمة لضمان اتساق التعليمات البرمجية وصحتها. ومع ذلك، عندما يتعلق الأمر باختبار الوحدة، فإن استخدام الثوابت يمكن أن يخلق تحديات. تستكشف هذه المقالة كيفية إعادة تعريف الثوابت خصيصًا لأغراض الاختبار في Go.
التحدي مع الثوابت
الثوابت في Go هي قيم ثابتة لا يمكن تعديلها أثناء تنفيذ البرنامج. يضمن هذا الثبات سلامة حالة البرنامج ويمنع التغييرات العرضية. ومع ذلك، أثناء الاختبار، قد يكون من الضروري تعديل الثوابت مؤقتًا لاختبار سيناريوهات محددة.
منهج سهل الاختبار
خذ بعين الاعتبار المثال التالي:
package main
const baseUrl = "http://google.com"
// in main_test.go
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
...
}))
const baseUrl = ts.URL // Error: const baseUrl already defined
في هذا المثال، نريد استخدام خادم اختبار بدلاً من استدعاء واجهة برمجة التطبيقات البعيدة للاختبار. للقيام بذلك، نحتاج إلى إعادة تعريف baseUrl باستخدام عنوان URL الخاص بخادم الاختبار. ومع ذلك، Go يلقي خطأ لأن baseUrl الثابت محدد بالفعل.
الحل: Refactor for Testability
لتسهيل الاختبار، يمكننا إعادة صياغة الكود قليلاً عن طريق إدخال وظيفة إضافية:const baseUrl_ = "http://google.com"
func MyFunc() string {
// Call other function passing the const value
return myFuncImpl(baseUrl_)
}
func myFuncImpl(baseUrl string) string {
// use baseUrl
// Same implementation that was in your original MyFunc() function
}
في هذا الكود المُعاد هيكلته، تقوم وظيفة MyFunc الأصلية بتفويض تنفيذها إلى myFuncImpl، والتي تأخذ معلمة baseUrl. يتيح لنا هذا الاتصال بـ myFuncImpl مباشرةً من وظيفة اختبار وتمرير أي عنوان URL أساسي مطلوب.
الحفاظ على رمز الإنتاج آمنًا
تظل وظيفة MyFunc الأصلية آمنة وغير متأثرة بـ إعادة الهيكلة. يقوم دائمًا بتمرير baseUrl_ الثابت إلى myFuncImpl، مما يضمن أن كود الإنتاج لا يحتوي على سلوك غير متوقع بسبب الثوابت المعدلة.
الاستنتاج
تسمح هذه التقنية للمطورين بإعادة تعريف الثوابت لأغراض الاختبار مع الحفاظ على سلامة وسلامة رمز الإنتاج. ومن خلال تقديم وظيفة إضافية توفر نفس وظيفة الوظيفة الأصلية، يمكن للاختبارات تعديل الثوابت دون التأثير على سلوك الكود الفعلي.تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3