اختبار الوحدات ذات المعلمات في بايثون: دليل لإنشاء الاختبارات الديناميكية
في تطوير البرمجيات، يلعب الاختبار دورًا حاسمًا في ضمان الموثوقية و دقة التعليمات البرمجية لدينا. يتضمن اختبار الوحدة، على وجه الخصوص، إنشاء اختبارات فردية لوظائف أو وحدات محددة. ومع ذلك، عند التعامل مع مجموعات البيانات الكبيرة أو سيناريوهات الاختبار المعقدة، يصبح من الصعب كتابة الاختبارات يدويًا لكل معلمة.
اختبار المعلمات: حل لإنشاء اختبار ديناميكي
يعالج الاختبار ذو المعلمات، والمعروف أيضًا باسم اختبار الوحدة ذات المعلمات، هذا التحدي من خلال أتمتة عملية إنشاء الاختبار بناءً على معلمات الإدخال. يسمح لنا بتنفيذ اختبار واحد عبر مجموعات متعددة من البيانات، مع استبدال معلمات الاختبار ديناميكيًا في وقت التشغيل.
أدوات وتقنيات لتحديد المعلمات
توفر بايثون نطاقًا من الأدوات والمكتبات لتحديد المعلمات. وتشمل هذه:
1. ديكور pytest:
يقدم pytest مصمم ديكور مناسب @pytest.mark.parametrize يبسط عملية تحديد المعلمات. إنها تمكننا من تمرير قائمة من الصفوف التي تحتوي على معلمات الاختبار، ويقوم مصمم الديكور بتوسيع الاختبار لكل مجموعة من القيم.
مثال:
import pytest @pytest.mark.parametrize("name, a, b", [ ("foo", "a", "a"), ("bar", "a", "b"), ("lee", "b", "b"), ]) def test_sequence(name, a, b): assert a == b
2. مكتبة ذات معلمات:
توفر المكتبة ذات المعلمات طريقة بديلة لتحديد المعلمات. يسمح لنا باستخدام الديكور @parameterized.expand لتحديد معلمات الاختبار كقوائم أو مولدات.
مثال:
from parameterized import parameterized class TestSequence(unittest.TestCase): @parameterized.expand([ ("foo", "a", "a"), ("bar", "a", "b"), ("lee", "b", "b"), ]) def test_sequence(self, name, a, b): self.assertEqual(a, b)
فوائد الاختبار ذو المعلمات:
بالنسبة للسياق التاريخي، يمكننا أن نذكر النهج الأقدم الذي يتضمن استخدام إنشاء الطبقة الديناميكية لإنشاء الاختبارات: مثال:
اختبار وحدة الاستيراد l = [["foo", "a", "a",], ["bar", "a", "b"], ["lee", "b", " ;ب"]] فئة TestSequense (unittest.TestCase): يمر مواطن اختبار_المولد (أ، ب): اختبار الدفاع (النفس): تأكيد الذات (أ، ب) اختبار العودة إذا كان __name__ == '__main__': ل ر في ل: test_name = 'test_%s' % t[0] اختبار = test_generator(t[1]، t[2]) setattr(TestSequense، test_name، اختبار) Unittest.main()
هذا النهج القديم أقل شيوعًا في تطوير Python الحديث نظرًا لتوفر أدوات تحديد معلمات أكثر كفاءة وسهلة الاستخدام.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3