AttributeError : '모듈'개체에 '테스트'속성이 없습니다.


101

이 명령을 실행하고 있습니다.

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'

디렉토리 구조 :

여기에 이미지 설명 입력

답변:


182

나는 마침내 다른 문제를 해결하기 위해 그것을 알아 냈습니다. 문제는 내 테스트에서 가져 오기를 찾을 수 없다는 것입니다.

테스트를 가져 오지 못하면 위의 오류가 발생하는 것 같습니다. 이는 테스트 스위트가 손상된 테스트를 가져올 수 없기 때문에 의미가 있습니다. 적어도 내 테스트 파일 내에서 가져 오기를 수정하고 제대로 작동하기 시작했는지 확인했기 때문에 이것이 진행되고 있다고 생각합니다.

테스트 케이스의 유효성을 검사하려면 Python 콘솔에서 테스트 케이스 파일을 가져 오십시오.

예:

from project.apps.app1.tests import *

그 메시지의 잘못된 가정.
AdamC

1
이 또한 파이썬 쉘 열 필요가 제거 명령 줄에서 수행 할 수 있습니다python -c "from project.apps.app1.tests import *"
하칸 B.

1
+1하면 혼란스러운 오류 메시지로부터 나를 구했습니다. 제안의 유일한 문제는 데스 스타 를 수입했다는 것 입니다. 실험용 콘솔에서는 괜찮지 만 코드에서는 항상 필요한 이름 만 가져옵니다.
피터 M.는 - 모니카의 약자

" 데스 스타 " 의 사용을 두려워하는 대신 __all__각 파일 에서 변수를 사용할 수 없습니까? 그리고 from package_name.module import *?를 사용할 때 내보낼 클래스 이름, 함수 및 변수 목록을 지정합니다 . 이 패턴으로 행운을 빕니다. __all__각 파일의 상단에 비트 를 작성하는 데 시간이 조금 더 걸린다는 것을 알고 있습니다. 그러나 " 데스 스타 "를 사용하여 가져 오는 것은 잘 작동하는 것 같습니다.
MikeyE

나는 방금이 문제가 있었고 정말 혼란 스러웠습니다. 답변 해주셔서 감사합니다. 파이썬은 여기서 옳은 일을하지 않습니다. 더 명확한 메시지가 필요합니다. 즉, "... import *"는 테스트 실행기의 일부가 아니라 테스트를 확인하기위한 것이라고 가정합니다. 후자는 부적절 할 것 같습니다.
rfportilla

35

사용하다:

./manage.py shell

뒤에

import myapp.tests

가져 오기 오류의 특성을 찾으려면


노력에 감사 드리며 많은 사람들에게 효과가있는 것 같습니다. 그러나 파이썬 대화 형 쉘을 열었을 때 오류없이 둘 ./manage.py shell중 하나 import myapp.tests또는 from myapp.tests import *둘 다 작동했습니다. 그러나 여전히 OP에서 설명한 오류가 발생합니다.
MikeyE

21

내 경우를 들어, 나는 만들 필요가 빈 __init__.py을 내에서 app/tests폴더


6

위의 Steve Bradshaw의 예는 가져 오기 오류에 대해 작동합니다 (Steve에게 감사합니다).

다른 유형의 오류 (예 : ValueError)도 발생할 수 있습니다.

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

이 오류가 무엇인지 확인하려면

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

4

Chris와 같은 오류가 발생했습니다. 이전 모델을 삭제 한 다음 tests.py를 실행했지만 다른 파일 (views.py)이 여전히 삭제 된 모델을 가져 오려고했습니다.

지금은 사용되지 않는 import 문을 꺼냈을 때 문제가 해결되었습니다.


3

스크립트에서 사용중인 모든 모듈이 손상되지 않았는지 확인하십시오. 이것은 수입 명세서에서 철자를 검사하는 것을 의미합니다.

# 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

2

순환 가져 오기 참조를 수정하여 "AttributeError : module 'utils'has no attribute 'name_of_my_function'"오류를 해결했습니다. 내 파일 manage.py와 utils.py에는 각각 서로를 가리키는 import 문이 있습니다.


1

django 문서에 따르면 테스트실행할 때 테스트 유틸리티의 기본 동작은 이름이 test로 시작하는 파일에서 모든 테스트 케이스 (즉, unittest.TestCase의 하위 클래스)를 찾고 자동으로 테스트 스위트를 빌드하는 것입니다. 해당 테스트 케이스를 실행하고 해당 스위트를 실행하십시오.

그래서 이것을 시도하십시오 : python manage.py test tests.py


1

같은 오류가 발생했지만 여기에서 모든 이유 목록을 확인했지만 문제가 해결되지 않았습니다.

마지막으로 그 이유는 가져 왔지만 아직 사용하지 않은 한 메서드의 이름이 올바르지 않기 때문입니다. 어리석은 오류이지만 발생합니다.


1

나는 같은 오류가 있었다. 내 모듈의 이름을 common.py로 지정했지만 이미 다른 common.py 모듈이 있었기 때문입니다. 내가해야 할 일은 모듈의 이름을 바꾸는 것뿐이었습니다.


0

unittest.TestCase를 작성하는 동안 비슷한 오류가 발생했습니다. 동일한 메서드 정의를있는 그대로 다시 입력하면 작동하는 것 같았습니다!

내가 PyCharm에서 눈에 띄는 유일한 변경 사항은 setup (self) 메서드가 TestCase에 정의 된 원래 메서드를 재정의해야하기 때문에 두 번째로 '재정의'아이콘 팝업이었습니다.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.