코 테스트 프레임 워크 가 파일 구조의 테스트 스크립트 아래에있는 모듈을 인식 하도록 할 수없는 것 같습니다 . 문제를 보여주는 가장 간단한 예를 설정했습니다. 아래에서 설명하겠습니다.
패키지 파일 구조는 다음과 같습니다.
./__init__.py
./foo.py
./tests
./__init__.py
./test_foo.py
foo.py에는 다음이 포함됩니다.
def dumb_true():
return True
tests / test_foo.py에는 다음이 포함됩니다.
import foo
def test_foo():
assert foo.dumb_true()
두 init .py 파일이 비어 있습니다.
nosetests -vv
주 디렉터리 (foo.py가있는 위치)에서 실행하면 다음 과 같은 결과가 나타납니다.
Failure: ImportError (No module named foo) ... ERROR
======================================================================
ERROR: Failure: ImportError (No module named foo)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python/site-packages/nose-0.11.1-py2.6.egg/nose/loader.py", line 379, in loadTestsFromName
addr.filename, addr.module)
File "/usr/lib/python/site-packages/nose-0.11.1-py2.6.egg/nose/importer.py", line 39, in importFromPath
return self.importFromDir(dir_path, fqname)
File "/usr/lib/python/site-packages/nose-0.11.1-py2.6.egg/nose/importer.py", line 86, in importFromDir
mod = load_module(part_fqname, fh, filename, desc)
File "/home/user/nose_testing/tests/test_foo.py", line 1, in <module>
import foo
ImportError: No module named foo
----------------------------------------------------------------------
Ran 1 test in 0.002s
FAILED (errors=1)
tests / 디렉토리 내부에서 실행할 때 동일한 오류가 발생합니다. 내가 찾은 문서와 예제 에 따르면 nose는 모든 부모 패키지를 경로와 호출되는 디렉토리에 추가해야하지만 내 경우에는 이런 일이 발생하지 않는 것 같습니다.
Python 2.6.2로 Ubuntu 8.04를 실행하고 있습니다. 중요한 경우 수동으로 (setup_tools가 아닌) nose를 구축하고 설치했습니다.
답변
당신은 __init__.py
당신의 최상위 디렉토리에 있습니다. 그것은 그것을 패키지로 만듭니다. 제거하면 nosetests
작동합니다.
당신이 그것을 제거하지 않으면, 당신은 변경해야 import
에 import dir.foo
, dir
디렉토리의 이름입니다.
답변
당신은 virtualenv에 있습니까? 제 경우 nosetests
에 하나 /usr/bin/nosetests
사용되었다 /usr/bin/python
. virtualenv의 패키지는 확실히 시스템 경로에 있지 않습니다. 다음은이 문제를 해결했습니다.
source myvirtualenv/activate
pip install nose
which nosetests
/home/me/myvirtualenv/bin/nosetests
답변
나중에이 질문을 찾는 사람들에게 : __init__.py
내 tests 디렉토리에 파일 이 없으면 가져 오기 오류가 발생합니다 .
내 디렉토리 구조는 다음과 같습니다.
./tests/
./test_some_random_stuff.py
코 테스트를 실행 한 경우 :
nosetests -w tests
그것은 ImportError
다른 모든 사람들이보고 있는 것을 줄 것입니다. 빈 __init__.py
파일을 추가하면 정상적으로 작동합니다.
./tests/
./__init__.py
./test_some_random_stuff.py
답변
또 다른 잠재적 인 문제는 디렉토리 트리의 하이픈 / 대시로 나타납니다. 최근에 디렉토리 이름을 sub-dir
에서 sub_dir
.
답변
물론 가져올 모듈에 구문 오류가있는 경우이 문제가 발생합니다. 나에게 문제는 tests.py와 같은 디렉토리에 module / tests.bak.py와 같은 경로로 테스트 파일을 백업했을 때 문제가 발생했습니다. 또한 Django 앱에서 init 패키지 / 모듈 문제 를 처리하기 위해 다음을 실행하여 (bash / OSX 셸에서) init .pyc 파일이 주변에 있지 않은지 확인할 수 있습니다.
find . -name '*.pyc' -delete
답변
nosetests
잘못된 디렉토리에서 명령을 실행하기 때문에이 오류 메시지가 나타납니다 .
어리석지 만 일어난다.
답변
이 문제를 일으킬 수있는 한 가지 더 : 테스트 이름을 형식으로 지정했습니다 testname.test.py
. 그 여분은 .
코를 혼란스럽게하고 그것을 가져 오지 말아야 할 것들을 가져 오게합니다. 틀에 얽매이지 않는 테스트 명명 규칙을 사용하면 문제가 발생한다는 것이 명백 할 수 있지만 주목할 가치가 있다고 생각했습니다.
