2013-06-05 8 views
4

원하는 방식으로 테스트를 위해 모듈을 가져올 수 없습니다. 나는 내 PYTHONPATH가/경로/API를/설정이모듈 가져 오기 오류 경로에서 모듈로 py.test 실행

/api 
    /api 
     __init__.py 
     my_module.py 
    /tests 
     my_module_test.py 

같은 디렉토리 구조를 가지고 2.7.2

에 VIRTUALENV에서이 모든 것을 실행 해요. I CD로/경로/API를 실행 다음

py.test tests/my_module_test.py 

그것은 다음과 같은 경우에 작동하지 않습니다 나는 my_module_test.py의 상단에 다음과 같은 한

  1. from api.my_module import my_function

다음과 같은 경우 작동합니다.

  1. my_module_test.py from my_module import my_function

이유 1과 같이 모듈을 가져올 수없는 이유는 무엇입니까?

답변

14

내가 py.text 문서에서

PYTHONPATH=`pwd` py.test tests/my_module_test.py 
2

PYTHONPATH를 사용하여 먼저 설치해야합니다 :

pip install -e . 
2

을 나는 귀하의 질문에 대답하고 내 자신의 혼란으로이 생성 . 나는 그것이 도움이되기를 바랍니다. py.test 명령 줄과 tox.ini에서 모두 PYTHONPATH에주의하십시오.

예제 프로젝트는 이하 here이고 :

mymodule.py :

import boto3 

def stuff(): 
    print "Yep!" 

tests/text_syntax_errors.py :

import boto3 
import mymodule 


# Define a basic test that actually doesn't do much. 
# I just wanted more than zero tests 
def test_one_equals_one(): 
    assert 1 == 1 

tox.ini :

[tox] 
skipsdist = True 
envlist = py27 

[flake8] 
max-line-length = 119 

[testenv] 
deps= -r{toxinidir}/requirements.txt 
commands=py.test 
setenv = 
    PYTHONPATH = {toxinidir} 
01 23,516,

requirements.txt :

boto3 
pytest 

README.md에서 :

방법 위해 실행이 예

내 코드를 테스트에 대한 나의 최초의 동기는 내가 스크립트에서 가져온 모듈의 철자가 잘못했던 것을

그 나는 일을 위해 글을 쓰고 있었다.

mymodule.py을 편집하고 "boto3"에서 b을 제거하면 아래 명령이 실패합니다. 그리고 이것은 좋은 일입니다.마찬가지로 실제 테스트가 실패하는 것을보고 싶다면 tests/test_syntax_errors.py을 간단히 편집하고 1 == 11 == 0으로 변경하십시오.

py.test

mbp0 pytest_test[master+*] $ PYTHONPATH=. py.test 
========================== test session starts ========================== 
platform darwin -- Python 2.7.11, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 
rootdir: /Users/jmacdonald/w/pytest_test, inifile: 
collected 1 items 

tests/test_syntax_errors.py . 

======================= 1 passed in 0.11 seconds ======================== 
mbp0 pytest_test[master+*] $ 

mbp0 pytest_test[master+*] $ tox 
py27 installed: boto3==1.3.1,botocore==1.4.37,docutils==0.12,futures==3.0.5,jmespath==0.9.0,py==1.4.31,pytest==2.9.2,python-dateutil==2.5.3,six==1.10.0 
py27 runtests: PYTHONHASHSEED='713732044' 
py27 runtests: commands[0] | py.test 
========================== test session starts ========================== 
platform darwin -- Python 2.7.11, pytest-2.9.2, py-1.4.31, pluggy-0.3.1 
rootdir: /Users/jmacdonald/w/pytest_test, inifile: 
collected 1 items 

tests/test_syntax_errors.py . 

======================= 1 passed in 0.11 seconds ======================== 
________________________________ summary ________________________________ 
    py27: commands succeeded 
    congratulations :) 
mbp0 pytest_test[master+*] $ 
+0

독극물이에 유래에 처음으로 답변 중 하나입니다 여기 – Damirchi

+0

당신의 코드를 게시하지 못할. 무슨 뜻인지 자세히 설명해 줄 수 있니? 내 코드는이 질문에 대한 구체적인 답변입니다. 텍스트 영역에 게시하기에는 너무 정교합니다. –

+0

@JeffMacDonald 코드에 특별한 형식이 있으므로 사용할 수 있습니다! :) – gofr1