2015-01-02 2 views
1

필자는 단순한 파이썬 모듈 (M1이라고 부름)을 추악함이 포함 된 패키지 내부의 독립 실행 형 (유일한 가져 오기는 collections)으로 사용합니다. 추한 부분은 패키지의 __init__.py 파일에 있습니다. 하지만 M1은 훌륭하고 깨끗하며 py.test와 함께 사용할 몇 가지 테스트 함수가 포함되어 있습니다.독립 실행 형 py.test (__init__.py 파일 무시)

이제 M1을 테스트하고 모든 추악함을 무시하고 싶습니다. 그러나 py.test는 __init__.py - 을 실행하고 싶습니다.이 문제를 방지 할 수있는 방법이 있습니까? 지금은 __init__.py 파일을 고칠 수 없으며 M1 테스트 모듈의 내용 바로 옆에 테스트 기능을 포함하고 싶습니다.

나는이 질문을 이미 읽었습니다 : 문제를 설명하고 있지만 해결책이없는 `py.test` and `__init__.py` files.


__init__.py 파일은 다음과 유사합니다.

from .M1 import CleanThing1, CleanThing2 
from .Evil1 import UglyThing1, UglyThing2 

을하고 Evil1 모듈이 제대로 실행하기 위해 어떤 PYTHONPATH의 해커를 필요로하는 문제는, 내가

py.test mymodule/M1.py 

를 실행할 때 때문에 Evil1 모듈의 실패 : 그냥 패키지 범위에 항목을 홍보합니다. 하지만 지금은 M1 모듈을 테스트하고 싶습니다.

답변

1

__init__.py 파일은 here과 같이 py.test 파일을 인식 할 수 있습니다.

그래서 기본적으로 다음과 같은 내용

def pytest_configure(config): 
    import sys 
    sys._called_from_test = True 

def pytest_unconfigure(config): 
    del sys._called_from_test 

mymodule/conftest.py 파일을 만들고

import sys 
if hasattr(sys, '_called_from_test'): 
    # called from within a test run 
    pass 
else: 
    # failing imports 
    from .M1 import CleanThing1, CleanThing2 
    from .Evil1 import UglyThing1, UglyThing2 

내가 실행할 수이 방법처럼 py.test 세션 안에있는 경우 __init__.py 파일에 간단하게 확인 py.test mymodule/M1.py 가져 오기 오류가 없습니다.

패키지 구조는 지금처럼 보인다 (I가 당신의 구조를 유사 희망)

package 
    | 
    |- __init__.py 
    |- mymodule/ 
     |- M1.py 
     |- conftest.py 
+0

방법은 인 MyModule/conftest.py을 만들려면 어떻게해야합니까? 내 모듈 이름은 M1.py (패키지가 아닌 모듈)입니다 ... M1/​​conftest.py를 만들어야합니까? –

+0

conftest.py 파일을 만드는 방법은 무엇을 의미합니까? 내 답변에 패키지 구조를 추가했습니다.이 구조가 귀하의 것과 닮았기를 바랍니다. – Jakob

+0

오, 고마워. 그림이 정말 도움이됩니다! 용어의 문제였습니다. 파이썬을 올바르게 이해한다면, "mymodule"은 실제로 서브 패키지가되어야합니다. 아니면 용어를 오해하고 있습니다. –

0

__init.py__을 실행하려는 py.test가 아니고 Python 인터프리터입니다. __init__.py이 실행되는 규칙은 파이썬 언어 정의의 일부이며, 그 주위에는 반드시 해킹이 필요합니다.

이 경우 스터브 된 Evil1 모듈을 직접 작성하고 M1 대신 가져 오기를 권하는 것이 좋습니다.