قم بتشغيل جميع الدكتوراه لجميع وحدات Python في مجلد دون رؤية حالات الفشل بسبب الواردات السيئة
سؤال
لقد بدأت دمج الدكتوراه في وحدات بلدي. (الصيحة!) هذه تميل إلى أن تكون الملفات التي بدأت كنصوص ، وهي الآن بعض الوظائف مع تطبيقات CLI في __name__=='__main__'
, ، لذلك لا أريد أن أضع إجراء الاختبارات هناك. حاولت nosetests --with-doctest
, ، لكن احصل على الكثير من الإخفاقات التي لا أريد أن أراها ، لأنه أثناء اختبار اكتشاف وحدات الاستيراد هذه التي لا تحتوي على أطباق ولكنها تتطلب استيراد الأشياء التي لم أقم بتثبيتها على هذا النظام ، أو يجب تشغيلها داخل منشآت Python الخاصة . هل هناك طريقة يمكنني من خلالها تشغيل جميع الدكتوراه؟
لقد فكرت في مفتاح Hotkey في VIM لتشغيل "استيراد Doctest ؛ Doctest.testfile (CurrentFilename)" لتشغيل الدكتوراه في الوحدة النمطية الحالية ، ونص آخر يدير جميع الاختبارات - ماذا يفعل مستخدمو الدكتوراه الآخرين؟ أم يجب أن أستخدم شيئًا آخر غير الدكتوراه؟
المحلول
أظن الأنف هو الطريق. يجب عليك إما استبعاد الوحدات الإشكالية بشكل صريح مع -e
أو التمسك بالواردات المفقودة في الكود الخاص بك مع بنيات مثل هذا:
try:
import simplejson as json
except ImportError:
import json
تحديث:
خيار آخر هو توفير بدائل وهمية للوحدات النمطية المفقودة. لنفترض أن رمزك يحتوي على شيء مثل هذا:
import myfunkymodule
وأنت تحاول إجراء اختباراتك في نظام حيث myfunkymodule
مفقود. يمكنك إنشاء ملف mock_modules/myfunkymodule.py
ملف مع تطبيقات وهمية للأشياء التي تحتاج منها (ربما باستخدام الحد الأدنى, ، وهو ما أوصي به بشدة إذا كنت تستخدم الدكتوراه). يمكنك الجري بعد ذلك nose
مثله:
$ PYTHONPATH=path_to/mock_modules nosetests --with-doctest
نصائح أخرى
يمكنك أيضًا إنشاء أجهزة غير متوقعة التي تلتزم وحدات Dockests المطلوبة ، وهي ميزة بحرية من الدكتوراه: http://docs.python.org/2/library/doctest.html#unittest-api.
import unittest
import doctest
import my_module_with_doctests
def load_tests(loader, tests, ignore):
tests.addTests(doctest.DocTestSuite(my_module_with_doctests))
return tests