اختبار الوحدة باستخدام كود يعتمد على الشبكة

StackOverflow https://stackoverflow.com/questions/44338

  •  09-06-2019
  •  | 
  •  

سؤال

أحاول أن أكون أفضل فيما يتعلق باختبار الوحدة للكود الخاص بي، لكنني الآن أكتب الكثير من الأكواد البرمجية التي تتعامل مع الأنظمة البعيدة.SNMP، WMI، هذا النوع من الأشياء.في معظم الفئات، يمكنني محاكاة الكائنات لاختبارها، ولكن كيف تتعامل مع وحدة اختبار نظام حقيقي؟على سبيل المثال، إذا خرج فصلي وحصل على كائن Win32_LogicalDisk لخادم، فكيف يمكنني اختباره على الوحدة؟

هل كانت مفيدة؟

المحلول

بافتراض أنك تقصد "كيف يمكنني اختبار الأشياء التي يصعب/المستحيل الاستهزاء بها":

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

class LogicalDiskConsumer(object):

    def __init__(self, arg1, arg2, LogicalDiskFactory)
        self.arg1=arg1
        self.arg2=arg2
        self.LogicalDisk=LogicalDiskFactory()

    def consumedisk(self):
        self.LogicalDisk.someaction()

بعد ذلك، في رمز اختبار الوحدة الخاص بك، قم بتمرير "LogicalDiskFactory" الذي يُرجع كائنًا وهميًا لـ "Win32_LogicalDisk".

نصائح أخرى

أسهل طريقة لاختبار الأشياء التي يصعب الاستهزاء بها هي إعادة بناء الكود بالطريقة التي تكون بها الكود الخاص بك (المنطق الذي يستحق الاختبار) في مكان واحد والأشياء الأخرى التي يستخدمها الكود الخاص بك موجودة في وحدة (وحدات) منفصلة.من السهل الاستهزاء بالوحدة وبهذه الطريقة يمكنك التركيز على منطق عملك.

يمكنك إنشاء مجموعة من "بذرة الاختبار" التي تحل محل إجراءات المكتبة الأساسية وترجع القيم المعروفة، ربما بعد تأخيرات مناسبة.

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

سأستخدم نفس الطريقة مرة أخرى، حيث أن مشكلات البرامج في هذا المنتج المعين تكون أقل بكثير مما هي عليه في منتجنا التالي الأكثر موثوقية!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top