web-dev-qa-db-ja.com

AttributeError:「モジュール」オブジェクトには属性「テスト」がありません

私はこのコマンドを実行しています:

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

そして、それはこのエラーを引き起こします:

AttributeError:「モジュール」オブジェクトには属性「テスト」がありません

以下は私のディレクトリ構造です。また、インストール済みのアプリ構成に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'

ディレクトリ構造:

enter image description here

88
Chris

私はついに別の問題に取り組んでいることがわかりました。問題は、テストでインポートが見つからなかったことです。

テストのインポートに失敗すると、上記のエラーが発生するようです。テストスイートは壊れたテストをインポートできないため、これは理にかなっています。少なくとも、テストファイル内のインポートを修正し、十分に機能し始めたので、これが起こっていると思います。

テストケースを検証するには、pythonコンソールにテストケースファイルをインポートしてみてください。

例:

from project.apps.app1.tests import *
170
Chris

つかいます:

./manage.py Shell

に続く

import myapp.tests

インポートエラーの性質を見つけます。

34
Steve Bradshaw

私の場合、app/testsフォルダーにempty __init __。pyを作成する必要があります

15
tmin

上記のSteve Bradshawの例は、インポートエラーに対して機能します(ありがとう、Steve)。

他のタイプのエラー(ValueErrorなど)も原因となる場合があります

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

これらのエラーが何であるかを確認するには

./manage.py Shell
from myapp.tests import SomeTestCase
t = SomeTestCase()
6
lukeaus

クリスと同じエラーがありました。古いモデルを削除してからtests.pyを実行しましたが、別のファイル(views.py)が削除されたモデルをインポートしようとしていました。

廃止されたimportステートメントを削除すると、問題は解決しました。

4
Doug Murphy

スクリプトで使用しているすべてのモジュールが壊れていないことを確認してください。つまり、インポートステートメントのスペルをチェックするということです。

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

Djanoのインタラクティブコンソールでimportsステートメントを実行して、モジュールをテストできます。

$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
3
Lukasz Dynowski

循環インポート参照を修正して、「AttributeError:module 'utils' has no attribute 'name_of_my_function'」というエラーを解決しました。私のファイルmanage.pyとutils.pyにはそれぞれ、相互に指すimportステートメントがありました。

1
rudyt

Djangoドキュメントによると、 テストを実行 の場合、テストユーティリティのデフォルトの動作は、すべてのテストケース(つまり、 nittest.TestCaseのサブクラス) )名前がtestで始まるファイルで、これらのテストケースからテストスイートを自動的に構築し、そのスイートを実行します。

だからこれを試してください:python manage.py test tests.py

1
Kasrâmvd

同じエラーが発生しましたが、ここですべての理由リストを確認しましたが、私の問題は解決しませんでした。

最後に、理由は、インポートしたがまだ使用していない1つのメソッドの名前が正しくないことです。それは愚かなエラーですが、起こります。

1
zhihong

同じエラーが発生しました。私のモジュールにcommon.pyという名前を付けたためであることが判明しましたが、既に他のcommon.pyモジュールがいくつかありました。モジュールの名前を変更するだけでした。

0
Davide Andrea