"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن استخدام الانعكاس لاختبار وظائف متعددة بتوقيعات مماثلة بكفاءة في Go؟

كيف يمكن استخدام الانعكاس لاختبار وظائف متعددة بتوقيعات مماثلة بكفاءة في Go؟

تم النشر بتاريخ 2024-11-16
تصفح:889

How Can Reflection Be Used to Efficiently Test Multiple Functions with Similar Signatures in Go?

استخدام الانعكاس لاختبار وحدة الوظائف في Go

عند اختبار وظائف متعددة ذات توقيعات وقيم إرجاع مماثلة، يكون من الممل كتابة اختبارات فردية لكل وظيفة. في 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