عندما يتعلق الأمر بالاختبار في بيثون ، فإن ضمان اختبارات موثوقة ومعزولة أمر بالغ الأهمية. أحد التحديات الشائعة هو كيفية السخرية من أو تعديل سلوك الكائنات والوظائف أثناء الاختبارات. هذا هو المكان الذي تضيء فيه لاعبا اساسيا monkeypatch pytest. يوفر طريقة مرنة لاستبدال أجزاء من الكود ديناميكيًا أثناء الاختبار.
في هذه المدونة ، سنستكشف قوة monkeypatch ، ولماذا تكون مفيدة ، وكيف يمكنك استخدامها لكتابة اختبارات نظيفة وفعالة.
تتيح لك لاعبا اساسيا monkeypatch في pytest تعديل أو استبدال:
هذا التعديل الديناميكي مؤقت ويطبق فقط على نطاق الاختبار ، مما يضمن استعادة السلوك الأصلي بمجرد انتهاء الاختبار. هذا يجعل Monkeypatch مفيدًا بشكل خاص لسخر التبعيات أو التبعيات المتجددة أو اختبار التعليمات البرمجية في ظل ظروف محددة دون إجراء تغييرات دائمة.
إليك بعض سيناريوهات المفاتيح حيث يمكن لـ Monkeypatch تبسيط الاختبارات الخاصة بك:
افترض أن لديك وظيفة تعتمد على واجهة برمجة التطبيقات الخارجية:
# my_app.py def fetch_data(): # Simulate an API call return "Real API Response"
لاختبار المنطق دون الاتصال فعليًا واجهة برمجة التطبيقات ، يمكنك أن تسخر من Fetch_data:
# test_my_app.py from my_app import fetch_data def test_fetch_data(monkeypatch): def mock_fetch_data(): return "Mocked Response" monkeypatch.setattr("my_app.fetch_data", mock_fetch_data) assert fetch_data() == "Mocked Response"
تخيل أنك تختبر وظيفة تعتمد على متغيرات البيئة:
# config.py import os def get_database_url(): return os.getenv("DATABASE_URL", "default_url")
يمكنك استخدام monkeypatch لمحاكاة بيئات مختلفة:
# test_config.py from config import get_database_url def test_get_database_url(monkeypatch): monkeypatch.setenv("DATABASE_URL", "mocked_url") assert get_database_url() == "mocked_url"
إذا كنت بحاجة إلى استبدال طريقة داخل الفصل مؤقتًا:
# my_class.py class Calculator: def add(self, a, b): return a b
اختبر السلوك باستخدام طريقة وهمية:
# test_my_class.py from my_class import Calculator def test_calculator_add(monkeypatch): def mock_add(self, a, b): return 42 monkeypatch.setattr(Calculator, "add", mock_add) calc = Calculator() assert calc.add(1, 2) == 42
يمكنك حتى السخرية من وظائف مدمجة لسيناريوهات محددة:
# my_module.py def is_file_openable(filename): try: with open(filename, "r"): return True except IOError: return False
نفتح لمحاكاة سلوكيات مختلفة:
# test_my_module.py from my_module import is_file_openable def test_is_file_openable(monkeypatch): def mock_open(filename, mode): raise IOError("Mocked IOError") monkeypatch.setattr("builtins.open", mock_open) assert not is_file_openable("test.txt")
Pytest's Monkeypatch هي أداة قوية لكتابة اختبارات معزولة وموثوقة ونظيفة. سواء كنت تسخر من وظيفة ، أو متغيرات البيئة المتجددة ، أو حالات اختبار الحافة ، يمكن لـ Monkeypatch تبسيط سير عمل اختبارك بشكل كبير.
من خلال دمج الأمثلة وأفضل الممارسات الموضحة هنا ، يمكنك جعل جناح الاختبار الخاص بك قويًا ويمكن صيانته. استكشف وثائق Pytest الرسمية لمعرفة المزيد وإلغاء تأمين الإمكانات الكاملة لـ Pytest!
اختبار سعيد!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3