تحسين فعالية الاختبارات باستخدام Dependency Injection
في هذا السياق، يعتبر استخدام allow_any_instance_of
في اختبارات الوحدات من أساليب الاختبار الشائعة، ولكنه يعتبر أيضًا غير مستحب نظرًا لبعض الأسباب الموجودة في وثائق RSpec. تحاول هذه الوثائق تشجيع المطورين على تجنب استخدام هذا الأسلوب لأسباب تتعلق بصيانة الشيفرة وفهمها.
لتجنب استخدام allow_any_instance_of
، يمكن اعتماد أسلوب آخر يستند إلى التصميم الجيد ومبدأ تبديل الاعتماد. في سياق الشيفرة التي قدمتها، يمكن تحسين الأمور بالاعتماد على حقل خاص لبناء الاسم (NameBuilder
) بدلاً من استخدام allow_any_instance_of
. لنلقي نظرة أفضل على الطريقة المقترحة:
-
توجيه الزوار بشكل ديناميكي في Angular 202/02/2024
-
اختيار مكتبة خيوط C متعددة المنصات02/02/2024
-
استخراج قيمة id من JSON في Laravel11/03/2024
rubyclass A
def create_server
options = {
name: name_builder.build_name
}
do_some_operations(options)
end
private
def name_builder
@name_builder ||= NameBuilder.new
end
end
تعتمد هذه الطريقة على استخدام حقل خاص (@name_builder
) لتخزين مثيل NameBuilder
واستخدامه عند الحاجة. هذا يقلل من الحاجة إلى استخدام allow_any_instance_of
في اختباراتك، ويحسن فهم الشيفرة ويجعلها أكثر صيانة.
مع هذا النهج، يمكنك تجنب إضافة الكثير من الأساليب الزائدة في الشيفرة وتحسين فهم الشيفرة وصيانتها. بالتالي، يكون الكود أقل تعقيدًا وأكثر قابلية للتوسع والصيانة في المستقبل.
المزيد من المعلومات
هذا النهج الذي اعتمدناه يستند إلى مبدأ تصميم البرمجة الشيئية الجيدة والتبديل بين الاعتماد. من خلال تحسين هيكل الشيفرة وتجنب استخدام allow_any_instance_of
، نحن نسعى لتحقيق عدة فوائد:
-
صيانة أفضل: باستخدام الحقل الخاص لتخزين مثيل
NameBuilder
، يمكن للمطورين النظر إلى هيكل الكود وفهمه بسهولة أكبر. الشيفرة تصبح أكثر وضوحًا، مما يسهل عمليات الصيانة وتعديل الشيفرة في المستقبل. -
تبديل بين الاعتماد (Dependency Injection): من خلال تحديد اعتماد
NameBuilder
باستخدام الحقل الخاص، يمكنك بسهولة تغيير تنفيذNameBuilder
دون التأثير على الشيفرة الرئيسية. هذا يعزز فصل المسؤوليات ويسمح بتبديل مكونات البرنامج بسهولة. -
تحسين قابلية الاختبار: عندما تعتمد على حقل خاص لاعتماد
NameBuilder
، يمكنك بسهولة إعادة تعيينه أو استبداله بنسخة مزيفة (Mock) أثناء الاختبارات. هذا يسهل عليك كتابة اختبارات فعالة دون الحاجة إلى استخدامallow_any_instance_of
، ويقلل من الاعتماد على تفاصيل الإعمال الداخلية للكائنات. -
تعزيز فهم الشيفرة: باستخدام هذا النهج، يمكن للقراء فهم طريقة عمل الكود بشكل أفضل دون الحاجة إلى معالجة الكثير من الطرق الفرعية أو الدوال غير الضرورية. هذا يساهم في تحسين وثوق المطورين في النظام.
باختصار، من خلال اعتماد مبدأ تبديل الاعتماد واستخدام حقول خاصة، يمكن تحسين هيكل الشيفرة وجعلها أكثر قابلية للصيانة، ويساعد في تحسين جودة البرمجيات وفهمها.