गुण: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'परीक्षण'


101

मैं यह कमांड चला रहा हूं:

python manage.py test project.apps.app1.tests

और यह इस त्रुटि का कारण बनता है:

गुण: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'परीक्षण'

नीचे मेरी निर्देशिका संरचना है। मैंने अपने इंस्टॉल किए गए ऐप्स कॉन्फिगर में app1 को भी जोड़ा है।

Traceback (most recent call last):
    File "manage.py", line 10, in <module> execute_from_command_line(sys.argv)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 50, in run_from_argv
    super(Command, self).run_from_argv(argv)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 71, in execute
    super(Command, self).execute(*args, **options)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/core/management/commands/test.py", line 88, in handle
    failures = test_runner.run_tests(test_labels)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 146, in run_tests
    suite = self.build_suite(test_labels, extra_tests)
    File "/home/username/local/dev/local/lib/python2.7/site-packages/django/test/runner.py", line 66, in build_suite
    tests = self.test_loader.loadTestsFromName(label)
    File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
    parent, obj = obj, getattr(obj, part)
    AttributeError: 'module' object has no attribute 'tests'

निर्देशिका संरचना:

यहां छवि विवरण दर्ज करें

जवाबों:


182

मैं अंत में यह पता लगा कि यह एक और समस्या पर काम कर रहा है। समस्या यह थी कि मेरा परीक्षण आयात नहीं कर सका।

यदि आपका परीक्षण आयात करने में विफल रहता है तो ऐसा लगता है कि आपको उपरोक्त त्रुटि मिली है। यह समझ में आता है क्योंकि परीक्षण सूट एक टूटी हुई परीक्षा आयात नहीं कर सकता है। कम से कम मुझे लगता है कि यह वही है जो चल रहा है क्योंकि मैंने अपनी परीक्षण फ़ाइल के भीतर आयात तय किया है और निश्चित रूप से यह काम करना शुरू कर दिया है।

अपने परीक्षण के मामले को मान्य करने के लिए बस अजगर केस कंसोल में परीक्षण केस फ़ाइल को आयात करने का प्रयास करें।

उदाहरण:

from project.apps.app1.tests import *

उस संदेश में खराब धारणा।
AdamC

1
यह कमांड लाइन से भी किया जा सकता है, जिससे पायथन शेल को खोलने की आवश्यकता समाप्त हो जाती है:python -c "from project.apps.app1.tests import *"
हकन बी।

1
+1 ने मुझे भ्रामक त्रुटि संदेश से बचाया। आपके सुझाव के साथ एकमात्र समस्या यह है कि आपने डेथ स्टार आयात किया है । प्रयोगों के लिए कंसोल में ठीक है, लेकिन कोड में, हमेशा केवल आवश्यक नाम आयात करें।
पीटर एम। -

" डेथ स्टार " के उपयोग से डरने के बजाय क्या आप __all__प्रत्येक फ़ाइल में चर का उपयोग नहीं कर सकते ? और उपयोग करते समय निर्यात करने के लिए वर्ग के नाम, फ़ंक्शन और चर की सूची निर्दिष्ट करें from package_name.module import *? मुझे इस पैटर्न के साथ अच्छी किस्मत मिली है। मैं समझता हूं कि __all__प्रत्येक फ़ाइल के शीर्ष पर बिट लिखने में थोड़ा अधिक समय लगता है । लेकिन " डेथ स्टार " का उपयोग करके आयात करना अच्छी तरह से काम करता है।
मिकी

मेरे पास बस यह मुद्दा था और वास्तव में उलझन में था। जवाब के लिए धन्यवाद। अजगर यहां सही काम नहीं कर रहा है। इसके लिए एक स्पष्ट संदेश की जरूरत है। यह कहा जा रहा है, मुझे लगता है कि आपका "... आयात *" केवल परीक्षणों की जांच करने के लिए है, इसका मतलब परीक्षण धावक का हिस्सा नहीं है ... मुझे लगता है कि उत्तरार्द्ध अनुचित होगा।
rfportilla

35

उपयोग:

./manage.py shell

के बाद

import myapp.tests

आयात त्रुटि की प्रकृति का पता लगाने के लिए।


मैं प्रयास की सराहना करता हूं, और ऐसा लगता है कि यह कई लोगों के लिए काम किया है। लेकिन, जब मैंने एक अजगर इंटरएक्टिव शेल का उपयोग करके खोला, ./manage.py shellतो import myapp.testsया तो from myapp.tests import *त्रुटि के बिना काम किया। लेकिन, मुझे अभी भी ओपी द्वारा वर्णित त्रुटि मिलती है।
23

21

मेरे मामले के लिए, मुझे अपने फ़ोल्डर में एक खाली __init__.py बनाना होगाapp/tests


6

ऊपर स्टीव ब्रैडशॉ का उदाहरण आयात त्रुटियों के लिए काम करता है (धन्यवाद स्टीव)।

अन्य प्रकार की त्रुटियाँ (जैसे ValueError) भी हो सकती हैं

AttributeError: 'module' object has no attribute 'tests'

यह देखने के लिए कि ये त्रुटियां क्या हैं

./manage.py shell
from myapp.tests import SomeTestCase
t = SomeTestCase()

4

मैं क्रिस के रूप में एक ही त्रुटि थी। मैंने एक पुराना मॉडल डिलीट कर दिया था, फिर टेस्टशो चलाएं, लेकिन एक अन्य फाइल (व्यूहोम) अभी भी हटाए गए मॉडल को आयात करने की कोशिश कर रहा था।

जब मैंने अब अप्रचलित आयात विवरण निकाला, तो समस्या हल हो गई।


3

सुनिश्चित करें कि आपके द्वारा अपनी स्क्रिप्ट में उपयोग किए जा रहे सभी मॉड्यूल टूटे नहीं हैं। इसके द्वारा मेरा मतलब है कि आपके आयात विवरणों में वर्तनी की जाँच करें।

# invalid import
from app.model.notification import Notification
# valid import
from app.models.notification import Notification

आप djano के इंटरेक्टिव कंसोल में आयात स्टेटमेंट निष्पादित करके अपने मॉड्यूल का परीक्षण कर सकते हैं।

$root@13faefes8: python manage.py shell
Type "help", "copyright", "credits" or "license" for more information (InteractiveConsole)
>>> from app.model.notification import Notification
Traceback (most recent call last): 
   File "<console>", line 1, in <module>
ImportError: No module named model.notification

2

मैंने एक परिपत्र आयात संदर्भ को ठीक करके "AttributeError: मॉड्यूल 'बर्तनों' का कोई गुण 'name_of_my_function' नहीं है।" मेरी फ़ाइलें प्रबंधित करें Oracle और utils.py प्रत्येक का एक-दूसरे को इंगित करने वाला एक आयात कथन था।


1

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

तो यह कोशिश करो: python manage.py test tests.py


1

समान त्रुटि मिली, लेकिन यहां सभी कारणों की सूची की जांच की, मेरी समस्या को ठीक नहीं किया।

अंत में यह पता लगाएं कि, इसका कारण यह है कि एक विधि का नाम जो आयात किया गया है लेकिन अभी तक उपयोग नहीं किया गया है, सही नहीं है। हालांकि यह एक बेवकूफ त्रुटि है, ऐसा होता है।


1

मेरी भी यही त्रुटि थी। यह पता चला है क्योंकि मैंने अपने मॉड्यूल का नाम सामान्य एएमडीओ रखा है, फिर भी पहले से ही कुछ अन्य सामान्य थिंकपैड मॉड्यूल था। मुझे केवल अपने मॉड्यूल का नाम बदलना था।


0

मुझे एक unittest.TestCase लिखते समय इसी तरह की त्रुटि हुई थी। जब मैंने एक ही विधि की परिभाषा फिर से टाइप की है, तो यह काम करने लगा है!

एकमात्र बदलाव जो मैंने PyCharm पर देखा, वह था 'ओवरराइड' आइकन 2-बार पॉप-अप, क्योंकि सेटअप (स्व) विधि को टेस्टकेस में परिभाषित मूल विधि को ओवरराइड करने की आवश्यकता है।

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.