অ্যাট্রিবিউটআরার: 'মডিউল' অবজেক্টটির কোনও বৈশিষ্ট্য নেই 'পরীক্ষা'


101

আমি এই আদেশটি চালাচ্ছি:

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

এবং এটি এই ত্রুটি ঘটায়:

অ্যাট্রিবিউটআরার: 'মডিউল' অবজেক্টটির কোনও বৈশিষ্ট্য নেই 'পরীক্ষা'

নীচে আমার ডিরেক্টরি কাঠামো আছে। আমি আমার ইনস্টল থাকা অ্যাপ্লিকেশন কনফিগারেশনে অ্যাপ 1 যোগ করেছি।

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'

ডিরেক্টরি কাঠামো:

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


181

আমি অবশেষে এটি অন্য সমস্যার উপর কাজ করে বুঝতে পেরেছি। সমস্যাটি ছিল আমার পরীক্ষাটি আমদানি খুঁজে পেল না।

দেখে মনে হচ্ছে আপনার পরীক্ষাটি আমদানি করতে ব্যর্থ হলে আপনি উপরের ত্রুটিটি পেয়েছেন। এটি বোঝা যায় কারণ পরীক্ষার স্যুট কোনও ভাঙ্গা পরীক্ষা আমদানি করতে পারে না। কমপক্ষে আমি মনে করি এটিই যা চলছে কারণ আমি আমার পরীক্ষার ফাইলের মধ্যে আমদানি স্থির করেছি এবং নিশ্চিত যে এটি কাজ শুরু করেছে started

আপনার পরীক্ষার কেসটি বৈধ করতে কেবল পাইথন কনসোলে পরীক্ষার কেস ফাইলটি আমদানির চেষ্টা করুন।

উদাহরণ:

from project.apps.app1.tests import *

এই বার্তায় খারাপ ধারণা।
অ্যাডামসি

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 *উভয়ই ত্রুটি ছাড়াই কাজ করেছি। তবে, আমি এখনও ওপি দ্বারা বর্ণিত ত্রুটি পেয়েছি।
মাইকি

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

আপনি ডিজানোর ইন্টারেক্টিভ কনসোলে আমদানি বিবৃতিগুলি সম্পাদন করে আপনার মডিউলগুলি পরীক্ষা করতে পারেন।

$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

আমি একটি সার্কুলার আমদানি রেফারেন্স ঠিক করে "এট্রিবিউটআরার: মডিউল 'ইউটিস'-এর কোনও নাম'____my_function'" ত্রুটিটি সমাধান করেছি। আমার ফাইলগুলি ম্যানেজ.পি এবং ইউজেস.পি-র প্রত্যেকের একে অপরের দিকে ইঙ্গিত করে একটি আমদানি বিবৃতি ছিল।


1

জাঙ্গো ডকুমেন্ট অনুসারে আপনি যখন আপনার পরীক্ষা পরিচালনা করেন , পরীক্ষার ইউটিলিটির ডিফল্ট আচরণ হ'ল যার নাম পরীক্ষার সাথে শুরু হয় এমন কোনও ফাইলের সমস্ত পরীক্ষার কেস (এটি ইউনিটেটেস্টের টেস্টকেসের সাবক্লাস ) সন্ধান করে স্বয়ংক্রিয়ভাবে একটি পরীক্ষা স্যুট তৈরি করে automatically যারা পরীক্ষার ক্ষেত্রে, এবং যে স্যুট চালাতে।

সুতরাং এটি চেষ্টা করুন: python manage.py test tests.py


1

একই ত্রুটি পেয়েছি, তবে এখানে সমস্ত কারণের তালিকাটি পরীক্ষা করে দেখুন, আমার সমস্যার সমাধান করেনি।

অবশেষে এটি নির্ধারণ করুন যে, কারণটি হ'ল এমন একটি পদ্ধতির নাম যা আমদানিকৃত তবে এখনও ব্যবহৃত হয়নি। যদিও এটি একটি বোকা ত্রুটি, এটি ঘটে।


1

আমারও ত্রুটি ছিল এটি প্রমাণিত হয়েছিল কারণ আমি আমার মডিউলটির নাম সাধারণ.পিপি রেখেছি, তবুও ইতিমধ্যে অন্য কিছু সাধারণ.পি মডিউল ছিল। আমাকে যা করতে হয়েছিল তা হল আমার মডিউলটির নতুন নামকরণ।


0

ইউনিটেস্ট.স্টেস্টকেস লেখার সময় আমারও তেমন ত্রুটি হয়েছিল। আমি যখন একই পদ্ধতির সংজ্ঞাটি আবার টাইপ করি তখন মনে হয় এটি কাজ করে!

পাইচার্মে কেবলমাত্র আমি যে পরিবর্তনটি লক্ষ্য করেছি তা ছিল দ্বিতীয়বারের মতো 'ওভাররাইড' আইকনটি পপ-আপ, কারণ সেটআপ (স্ব) পদ্ধতির টেস্টকেসে সংজ্ঞায়িত মূল পদ্ধতিটি ওভাররাইড করা দরকার।

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.