program tip

nose를 사용하여 테스트를 위해 Python 가져 오기-현재 패키지 위의 모듈 가져 오기 모범 사례

radiobox 2020. 12. 2. 08:19
반응형

nose를 사용하여 테스트를 위해 Python 가져 오기-현재 패키지 위의 모듈 가져 오기 모범 사례


이 질문은 다양한 형태로 자주 묻는 질문으로, 종종 "잘 안 하시네요"라는 답변을 얻습니다. 사람들 (나를 포함하여)이 구현으로 사용하려는 상식적인 시나리오가 있고 솔루션이 분명하지 않기 때문입니다 (이전에 해본 적이없는 경우).

"병에서 파리를 내 보낸다"는 대답을 받아 들일 것입니다.

주어진

project/
    __init__.py
    /code
        __init__.py
        sut.py
    /tests
        __init__.py
        test_sut.py

tests_sut.py가 시작되는 위치 :

import code.sut

루트 디렉토리에서 코 테스트를 실행하면 다음과 같은 결과가 발생합니다.

ImportError: No module named code.sut

여행 한 거리 :

a) 친척을 사용하여

from ..code import sut

b) PYTHONPATH에 프로젝트 루트 추가

c) 사용

sys.path.append

각 테스트 모듈을 시작할 때 가져 오기 전에 .. 경로를 추가합니다.

d) 다음을 수행하는 것을 기억하십시오.

setup.py 

프로젝트에서 테스트를 실행하기 전에 사이트 패키지에 모듈을 설치합니다.


따라서 요구 사항은 프로젝트에 대한 액세스 권한이있는 테스트 패키지 루트 아래에 테스트를 배치하는 것입니다. 위의 각각은 나에게 "자연스럽지"않다고 느끼거나 문제가 있거나 너무 많은 노력을 기울인 것처럼 보입니다!

자바에서는 작동하지만 기본적으로 빌드 도구 / IDE의 모든 클래스를 클래스 경로에 배치합니다. 아마도 문제는 내가 파이썬에서 "마법"을 기대하고 있다는 것입니까? Flask 웹 프레임 워크 테스트에서 d) 옵션이 선호되는 것 같습니다.

어쨌든 아래에서 선호하는 해결책을 추천하는 진술은 내 자신의 "부자연 스러움"이라는 느낌을 제거 할 것입니다.


당신은 이미 당신의 질문에 꽤 잘 대답했습니다. 배포 가능한 코드는 D (시스템 위치에 설치)를 선호합니다. 수백 개의 사용자 지정 라이브러리를 시스템 전체에 설치하지 않기 때문에 보통 C (sys.path 수정)를 사용합니다. 이론 상으로는 A (상대적 수입)가 더 좋아 보이지만 실패하는 경우가 있습니다. B (PYTHONPATH)는 제 생각에 테스트 목적으로 만 사용됩니다.

그것은 거의 모든 옵션을 요약합니다. 선호하는 옵션 (Python은 어디를 볼지 마법처럼 알고 있음)은 관련없는 프로젝트에서 자동으로 라이브러리를 찾는 것과 같이 예측할 수없는 결과를 초래할 수 있기 때문에 실제로 실행 가능한 솔루션이 아닙니다.

내 생각에, 최선의 방법은 이것을 프로그램의 진입 점에 두는 것입니다.

import sys, os
sys.path = [os.path.abspath(os.path.dirname(__file__))] + sys.path

나는 같은 문제가 있었고 관련 질문에서 찾았 습니다.

프로젝트 루트에서 __init__.py를 제거하십시오.


확인 된 답변이 있고 다른 대안을 공유하는 것이 좋은 이유라고 생각합니다. :)

을 호출하는 동안 설정할 수있는 컨트롤을 제공 하는 nose-pathmunge 가 있습니다 .sys.pathnosestests

참고 URL : https://stackoverflow.com/questions/6670275/python-imports-for-tests-using-nose-what-is-best-practice-for-imports-of-modul

반응형