2011-08-03 8 views
8

मैंने अभी एक परियोजना के मुख्य भाग को लिखना समाप्त कर दिया है जिस पर मैं काम कर रहा हूं और मैं जारी रखने से पहले एकजुटता का उपयोग करके इसके लिए परीक्षण लिखना चाहता हूं। मुझे पता है कि मुझे पहले यह करना चाहिए था, लेकिन जब मैंने शुरू किया तो मुझे पायथन नहीं पता था, इसलिए .. जो भी ..मैं एक मूल निर्देशिका से मॉड्यूल कैसे आयात करूं? (unittest प्रयोजन)

मैं क्या हासिल करना चाहता हूं: मेरे पास मुख्य पैकेज का उप-पैकेज है इसमें सभी मॉड्यूल शामिल हैं जिन्हें मैं इसके अंदर परीक्षण करना चाहता हूं। मैं एक 'सबस्कैकेज' के अंदर एक सबबैपैकेज रखना चाहता हूं जिसे कुछ 'टेस्ट' या कुछ ऐसा कहा जाता है जिसमें उसके सभी टेस्ट केस शामिल होते हैं, जिन्हें मैं पैकेज के बाहर से टेस्ट सूट में एकत्र करने में सक्षम होना चाहता हूं, इसलिए आखिरकार मैं सभी टेस्ट चला सकता हूं एक ही परियोजना में एक परियोजना।

/projectPackage 
/projectPackage/package 
/projectPackage/package/\__init__.py (empty) 
/projectPackage/package/someModule.py 
/projectPackage/package/... (more modules) 
/projectPackage/package/testing.py (runs all the tests in /tests/) 
/projectPackage/package/tests 
/projectPackage/package/tests/\__init__.py (empty) 
/projectPackage/package/tests/someModuleTests.py 

समस्या मैं कर रहा हूँ:

someModuleTests माता-पिता पैकेज से someModule आयात करने के लिए तो यह अपने तरीकों का परीक्षण कर सकते हैं

संरचना कुछ इस तरह है। यह काम नहीं लग रहा है। मुझे विभिन्न त्रुटियां मिलती हैं जैसे:

Attempted relative import beyond toplevel package 

वैसे भी, मुझे उम्मीद है कि यह सिर्फ इसलिए है क्योंकि मैं पाइथन नोब हूं! मेरे पास अपने विचार हैं कि मैं इस परियोजना के लिए इसे कैसे करने जा रहा हूं, क्योंकि निश्चित रूप से प्रत्येक अलग है, लेकिन मध्यम-बड़े अजगर परियोजनाओं के ढांचे पर किसी भी सामान्य सलाह की भी सराहना की जाती है।

उत्तर

13

पैरेंट निर्देशिका से यूनिट परीक्षण चलाएं ताकि निर्देशिका आपके PYTHONPATH (वर्तमान कार्यशील निर्देशिका हमेशा है) में हो। यह आपकी मूल निर्देशिका से परीक्षण फ़ाइल निष्पादित करके या नोसेटेट की तरह कुछ उपयोग करके किया जाता है जो आपके पैकेज में सभी परीक्षणों को दोबारा देखता है।

सापेक्ष आयात का उपयोग न करें, वे इस तरह की चीजों का कारण बनते हैं। कोशिश करने और इसे ठीक करने के लिए अपने PythonPATH और/या sys.path को हैक न करें।

+0

ठीक है महान है, धन्यवाद। मैं आपको उखाड़ फेंक दूंगा, लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है: एस –

+0

कोई समस्या नहीं है, अगर आप इसे पसंद करते हैं तो आप मेरे अतीत को उत्तर के रूप में चुन सकते हैं मुझे लगता है :-) – ikanobori

1

यदि आप अपना कोड निष्पादित कर सकते हैं तो आपके PYTHONPATH को पहले से ही सही ढंग से सेट किया जाना चाहिए। आपको जो मॉड्यूल आयात करना है, उसे निर्दिष्ट करना है, उदाहरण के लिए।

import projectPackage.package.someModule 
1

यह देखते हुए कि आप कमांड लाइन उपकरण का उपयोग कर रहे हैं अपने परीक्षण चलाने के लिए, आप the docs का पालन करें और निम्नलिखित की तरह कुछ हो सकता है:

python -m unittest package.tests.someModuleTests 
संबंधित मुद्दे