عند اختبار وظائف متعددة ذات توقيعات وقيم إرجاع مماثلة، يكون من الممل كتابة اختبارات فردية لكل وظيفة. في Go، يمكن للانعكاس أن يوفر حلاً لاختبار هذه الوظائف بشكل جماعي.
فكر في مجموعة من الوظائف (Func1، Func2، ...) مع التوقيع التالي:
func YourFunction() (int, error)
الهدف: اكتب اختبارًا يتكرر من خلال هذه المجموعة من الوظائف، يستدعي كل واحد منهم، ويختبر قيم الإرجاع الخاصة بهم لشروط محددة.
يتيح لنا الانعكاس الوصول إلى القيم والوظائف ومعالجتها في وقت التشغيل. من خلال إنشاء كائن Reflect.Value لجهاز الاستقبال، يمكننا العثور على الوظيفة المقابلة واستدعائها باستخدام Reflect.Value.MethodByName. يمكن بعد ذلك فحص القيمة التي تم إرجاعها للتأكد من صحتها.تنفيذ الاختبارإليك مثال للاختبار الذي يستخدم الانعكاس لاختبار جميع الوظائف مع الواجهة المحددة:وظيفة TestFunc(t *testing.T) { فار funcNames = []string{"Func1"، "Func2"، "Func3"} stype := Reflect.ValueOf(s) // المتلقي لـ _، fname := range funcNames { sfunc := stype.MethodByName(fname) ret := sfunc.Call([]reflect.Value{}) فال:= ريت[0].Int() يخطئ := يتراجع[1] إذا فال
func TestFunc(t *testing.T) {
var funcNames = []string{"Func1", "Func2", "Func3"}
stype := reflect.ValueOf(s) // receiver
for _, fname := range funcNames {
sfunc := stype.MethodByName(fname)
ret := sfunc.Call([]reflect.Value{})
val := ret[0].Int()
err := ret[1]
if val ضع في اعتبارك أن استدعاء دالة غير موجودة باستخدام الانعكاس سيؤدي إلى حالة من الذعر. للتعامل مع هذا، يمكننا استخدام الوظائف المؤجلة والتعافي لالتقاط حالة الذعر وتقديم رسائل خطأ أكثر إفادة.
الاستنتاج
من خلال الاستفادة من الانعكاس والتعامل مع الاستثناءات بشكل مناسب، يمكننا إنشاء اختبار واحد يختبر بكفاءة وظائف متعددة ذات سلوك مماثل، مما يقلل الحاجة إلى رمز اختبار متكرر ويضمن قوة اختباراتنا.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3