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

كيف يمكن لاختبار الوحدات ذات المعلمات تبسيط إنشاء اختبار بايثون؟

تم النشر بتاريخ 2024-12-23
تصفح:485

How Can Parameterized Unit Testing Streamline Python Test Generation?

اختبار الوحدات ذات المعلمات في بايثون: دليل لإنشاء الاختبارات الديناميكية

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

اختبار المعلمات: حل لإنشاء اختبار ديناميكي

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

أدوات وتقنيات لتحديد المعلمات

توفر بايثون نطاقًا من الأدوات والمكتبات لتحديد المعلمات. وتشمل هذه:

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