شروحات الكمبيوتر والإنترنت والموبايل

تعامل مع خطأ ValueError عند اختبار دالة مموهة في بايثون

تعد عملية اختبار الوحدات من العمليات الأساسية لضمان جودة وأمان البرامج، حيث تساهم في تحديد الأخطاء قبل أن تتسبب في مشكلات أكبر. لكن أحيانًا، قد نواجه بعض التحديات أثناء استخدام مكتبات التزوير (Mocking) في بايثون. في هذا المقال، سنناقش إحدى المشكلات الشائعة التي قد تعترض طريق المبرمجين عند التحقق من استدعاء الدوال المزوّرة، وهي مشكلة: "ValueError: not enough values to unpack (expected 2, got 0)".

ما هي الدوال المزوّرة في بايثون؟

تُستخدم الدوال المزوّرة (Mock Functions) في اختبار الوحدات لتقليد سلوك دوال أخرى دون تنفيذ فعلي لها، مما يسمح للفرق بضمان أن أجزاء معينة من التعليمات البرمجية تعمل كما هو متوقع. ومن خلال التزوير، يستطيع المطورون اختبار سلوك الوظائف المعقدة دون الحاجة إلى الاعتماد على البيانات الخارجية أو الموارد.

الفهم العميق لمشكلة ValueError

الخطأ "ValueError: not enough values to unpack (expected 2, got 0)" يظهر عادةً عندما يُتوقع أن تُعيد دالة ما قيمتين، ولكن الدالة تعيد قيمة فارغة أو قيمة واحدة فقط. في سياق الكود المذكور، لدينا دالة run_this_function التي تُستدعى داخل go_to_the_right_street. إذا لم تُستدعى run_this_function بشكل صحيح، سيتوجب على بايثون إلقاء هذا الخطأ.

تحليل الحالة الخاصة بك

في الكود الخاص بك، هناك تعديل يجب أن يتم على السلسلة التالية في (app.py):

action, extra_information = run_this_function('something)

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

تطبيق الاختبارات بنجاح

في ملف test_app.py، نستخدم مكتبة unittest.mock لإجراء الاختبار. يجب أن تتأكد من أن الوظيفة المزوّرة run_this_function_patch تعيد القيم بالطريقة المناسبة التي تُستخدم في الدالة التي نختبرها.

بينما يتم استدعاء الدالة go_to_the_right_street, ينبغي أن تختبر سلوك run_this_function المزوّر وتتحقق مما إذا كان قد تم استدعاؤه مرة واحدة فقط، مثل هذا:

mocked_function.assert_called_once()

إذا كان هناك أي تغييرات على side_effect، ينبغي أن تكون على الشكل التالي:

mocked_function.side_effect = [run_this_function_patch('something')]

هذا يضمن أن كل استدعاء للوظيفة المزوّرة يعود بالقيم الصحيحة التي تتوقعها الدالة الرئيسية.

تأكيد نجاح الاختبار

إذا كنت قد قمت بكل هذه التعديلات بشكل صحيح، ستحصل على نتيجة الاختبار التالية:

.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK

هذا يعني أن اختبار go_to_the_right_street قد تم بنجاح.

الخاتمة

لقد ناقشنا في هذا المقال مشكلة شائعة تعني بـ "python – Asserting that a function that is mocked is called_once but running into ValueError: not enough values to unpack (expected 2, got 0)". من خلال فهم كيفية تزوير الدوال بشكل صحيح والتأكد من أن الاستدعاءات تعمل كما هو متوقع، يمكنك معالجة الأخطاء بسرعة وتحسين جودة البرمجيات.

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

فهد السلال

خبير تقني متخصص في شروحات الكمبيوتر والإنترنت والموبايل، يتمتع بخبرة واسعة في تقديم حلول تقنية مبتكرة ومبسطة. يهدف فهد إلى مساعدة المستخدمين على تحسين تجربتهم التقنية من خلال مقالات وأدلة عملية واضحة وسهلة الفهم.
زر الذهاب إلى الأعلى
Don`t copy text!