2011-08-03 8 views
8

필자는 작업중인 프로젝트의 핵심 섹션 작성을 마쳤으며 계속하기 전에 unittest를 사용하여 테스트를 작성하려고합니다. 나는 전에 이것을 했어야한다는 것을 알고 있지만, 시작했을 때 나는 파이썬을 몰랐다. 그래서 .. .. 뭐든간에.상위 디렉토리에서 모듈을 가져 오는 방법은 무엇입니까? (unittest purpose)

나는 무엇을 달성하고 싶은가 : 나는 주 패키지의 하위 패키지를 가지고있다. 그 안에 테스트하고 싶은 모든 모듈이 들어 있습니다. 서브 패키지를 'tests'라고 부르거나 그 안에 모든 테스트 케이스가 들어있는 무언가를 넣고 싶습니다. 패키지의 외부에서 테스트 스위트로 집계하여 결국 모든 테스트를 실행할 수있게하고 싶습니다. 한 번에 전체 프로젝트.

/projectPackage 
/projectPackage/package 
/projectPackage/package/\__init__.py (empty) 
/projectPackage/package/someModule.py 
/projectPackage/package/... (more modules) 
/projectPackage/package/testing.py (runs all the tests in /tests/) 
/projectPackage/package/tests 
/projectPackage/package/tests/\__init__.py (empty) 
/projectPackage/package/tests/someModuleTests.py 

문제 나는 데 :

someModuleTests은 그것의 방법을 테스트 할 수 있도록 부모 패키지에서 someModule를 가져올 수있다

구조는이 같은 것입니다. 이것은 효과가없는 것 같습니다. 다음과 같은 다양한 오류가 발생합니다.

어쨌든 저는 파이썬 놈입니다. 나는이 프로젝트를 위해 어떻게 할 것인지에 대한 내 자신의 아이디어를 가지고있다. 왜냐하면 각각이 다르므로 중형 규모의 파이썬 프로젝트 구조화에 대한 일반적인 조언 또한 높이 평가된다.

답변

13

상위 디렉토리에서 단위 테스트를 실행하여 디렉토리가 PYTHONPATH에 있도록하십시오 (현재 작업 디렉토리는 항상 있음). 이것은 상위 디렉토리에서 테스트 파일을 실행하거나 패키지의 모든 테스트를 재귀 적으로 찾는 nosetest와 같은 것을 사용하여 수행됩니다.

상대적인 가져 오기를 사용하지 마십시오. 이런 경우가 발생합니다. PYTHONPATH 및/또는 sys.path를 해킹하지 마십시오.

+0

좋아 좋은, 감사합니다. 나는 당신을 업 그레 이드 하겠지만, 충분한 평판을 얻지는 못합니다. S –

+0

괜찮 으면, 내 과거를 대답으로 생각할 수 있습니다. – ikanobori

1

코드를 실행할 수 있으면 PYTHONPATH가 이미 올바르게 설정되어 있어야합니다. 필요한 모듈을 지정하는 것입니다.

import projectPackage.package.someModule 
1

당신이 테스트를 실행하려면 명령 줄 도구를 사용하고있는 점을 감안를, 당신은 the docs에 따라 다음과 같이 할 수 있습니다 :

python -m unittest package.tests.someModuleTests 
관련 문제