سؤال

لدي مشكلة فيما يتعلق ببثون الحزم والاختبار. أنا أكتب تطبيق باستخدام WX Python ولديها هيكل المجلد/الحزمة الأساسي التالي لأجزاء واجهة المستخدم الرسومية. ال Mainframe.py النافذة لها اعتماد على logpane.py لوحة ، والتي يتم استيرادها بسهولة باستخدام استيراد مطلق في Mainframe.py:

import guiapp.utilviews.logpane

تخطيط المجلد/الحزمة:

mainapp
   - main.py
   guiapp
       - __init__.py
       utilviews
           - __init__.py
           - logpane.py
           - other stuff...
       mainview
           - __init__.py
           - mainframe.py
           - other stuff here...
       other views...

ومع ذلك ، بالنسبة لأجزاء واجهة المستخدم الرسومية من التطبيق ، أود ، بالإضافة إلى اختبارات الوحدة (ولا تشكل أي مشكلة) ، لديك "اختبار" صغير/مثال لكل طريقة عرض. وهذا هو ، بالنسبة إلى تسجيل الدخول ، أرغب في الحصول على مثال صغير قابل للتشغيل والذي سيؤدي إلى تطبيق عظم عاري يوضح العرض لاختبار أن التصميم على ما يرام وما إلى ذلك. الطريقة التي بدأت بها هي أن لدي ملف

if __name__ == "__main__":
    # create some small window and a wx app
    # instanciate the panel and launch the app
    pass

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

لكن بالطبع انهارت الإستراتيجية ل Mainframe.py منذ الاعتماد على logpane.py لا يمكن حلها. هذا منذ الوحدة الرئيسية الحالية هو إن mainframe.py والطريقة الوحيدة التي يمكن أن تصل إلى حزمة utilviews هي إذا كانت الوحدة الرئيسية/التي تم إطلاقها أكثر في الشجرة.

فكيف يمكنني بنية هذه الأنواع من الاختبارات؟ لاختبارات الوحدة التي أستخدمها أنف وهو أمر لطيف ويعتني بالمشكلة حيث يتم إطلاق الأنف لكل مجلد MainApp (لذلك تعمل جميع المراجع داخل الواجهة). لكن هذه الاختبارات تشبه البرامج المستقلة الصغيرة. أنا ببساطة لا أستطيع الفوضى في مجلد MainApp مع ملفات Python هذه (سيكون هناك العديد من هذه الملفات). هل هناك أي طريقة أخرى يمكنني إنجاز هذا؟

أي مدخلات قيمة.

شكرا يا ريكارد

هل كانت مفيدة؟

المحلول

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

$ find
.
./test
./test/test.py
./some
./some/__init__.py

$ cat some/__init__.py 
x = 10

$ cat test/test.py 
import some
print some.x

$ cd test
$ export PYTHONPATH=..
$ python test.py
10
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top