قم بتشغيل جميع الدكتوراه لجميع وحدات Python في مجلد دون رؤية حالات الفشل بسبب الواردات السيئة

StackOverflow https://stackoverflow.com/questions/3653717

  •  01-10-2019
  •  | 
  •  

سؤال

لقد بدأت دمج الدكتوراه في وحدات بلدي. (الصيحة!) هذه تميل إلى أن تكون الملفات التي بدأت كنصوص ، وهي الآن بعض الوظائف مع تطبيقات 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top