일반적인 테스트 디렉토리 구조로 unittest 실행


701

간단한 파이썬 모듈조차도 매우 일반적인 디렉토리 구조는 단위 테스트를 자체 test디렉토리 로 분리하는 것 같습니다 .

new_project/
    antigravity/
        antigravity.py
    test/
        test_antigravity.py
    setup.py
    etc.

예를 들어이 Python 프로젝트 howto 를 참조하십시오 .

내 질문은 단순히 실제로 테스트를 실행하는 일반적인 방법은 무엇입니까? 나는 이것이 나를 제외한 모든 사람에게 명백한 것으로 생각하지만 모듈이 경로에 없으므로 python test_antigravity.py테스트 디렉토리에서 실행할 수 없습니다 import antigravity.

나는 PYTHONPATH 및 기타 검색 경로 관련 트릭을 수정할 수 있다는 것을 알고 있지만 이것이 가장 간단한 방법이라고 믿을 수는 없습니다. 통과.

다른 대안은 테스트 파일을 다른 디렉토리에 복사하는 것입니다.하지만 약간 바보처럼 보이고 별도의 디렉토리에 파일을 넣는 요점을 놓칩니다.

소스를 내 새 프로젝트에 다운로드 한 경우 어떻게 단위 테스트를 실행합니까? "사용자에게 단위 테스트를 실행하려면 X를 수행하십시오."라는 대답을 원합니다.


5
@EMP 검색 경로를 설정해야 할 때 적절한 해결책은 ... 검색 경로를 설정하는 것입니다. 어떤 솔루션을 기대 했습니까?
Carl Meyer

7
@CarlMeyer 또 다른 더 나은 해결책은 아래 답변에unittest 설명 된 것처럼 명령 줄 인터페이스 를 사용 하여 경로에 디렉토리를 추가 할 필요가 없다는 것입니다.
Pierre

13
여기도 마찬가지입니다. 방금 작은 Python 프로젝트를 위해 첫 번째 단위 테스트를 작성하는 데 착수했으며 소스를 src 디렉토리에 유지하고 테스트 디렉토리에서 테스트하면서 소스를 쉽게 실행할 수 없다는 사실을 이유로 며칠이 걸렸습니다. 기존 테스트 프레임 워크 중 하나와 비슷해 보입니다. 나는 결국 사물을 받아들이고 길을 알아낼 것이다. 그러나 이것은 매우 실망스러운 소개였습니다. (그리고 나는 파이썬 밖에서 베테랑을 테스트하는 유닛입니다.)
Ates Goral

답변:


657

내 생각에 가장 좋은 해결책은 unittest 명령 줄 인터페이스 를 사용하여 디렉토리를 추가 sys.path할 필요가 없으므로 TestLoader클래스 에서 수행하지 않아도됩니다 .

예를 들어 다음과 같은 디렉토리 구조

new_project
├── antigravity.py
└── test_antigravity.py

당신은 그냥 실행할 수 있습니다 :

$ cd new_project
$ python -m unittest test_antigravity

귀하와 같은 디렉토리 구조의 경우 :

new_project
├── antigravity
   ├── __init__.py         # make it a package
   └── antigravity.py
└── test
    ├── __init__.py         # also make test a package
    └── test_antigravity.py

test패키지 내부의 테스트 모듈에서 antigravity평소와 같이 패키지 및 해당 모듈을 가져올 수 있습니다 .

# import the package
import antigravity

# import the antigravity module
from antigravity import antigravity

# or an object inside the antigravity module
from antigravity.antigravity import my_object

단일 테스트 모듈 실행

이 경우 단일 테스트 모듈을 실행하려면 다음을 수행하십시오 test_antigravity.py.

$ cd new_project
$ python -m unittest test.test_antigravity

테스트 모듈을 가져 오는 것과 같은 방식으로 참조하십시오.

단일 테스트 사례 또는 테스트 방법 실행

또한 단일 TestCase또는 단일 테스트 방법을 실행할 수 있습니다 .

$ python -m unittest test.test_antigravity.GravityTestCase
$ python -m unittest test.test_antigravity.GravityTestCase.test_method

모든 테스트 실행

테스트 검색 을 사용하여 모든 테스트를 검색하고 실행할 수 있습니다. 모듈이나 패키지라는 이름이어야합니다 test*.py( -p, --pattern플래그 로 변경할 수 있음 ).

$ cd new_project
$ python -m unittest discover
$ # Also works without discover for Python 3
$ # as suggested by @Burrito in the comments
$ python -m unittest

패키지 test*.py내부의 모든 모듈 이 실행 test됩니다.


53
python -m unittest discovertest이름이 지정된 경우 디렉토리 에서 테스트를 찾아 실행합니다 test*.py. 당신이 하위 디렉토리라는 이름의 경우 tests, 사용 python -m unittest discover -s tests, 당신은 테스트 파일을 명명하는 경우 antigravity_test.py, 사용 python -m unittest discover -s tests -p '*test.py' 파일 이름은 밑줄하지만 대시를 사용할 수 있습니다.
Mike3d0g

10
ImportError: No module named 'test.test_antigravity'unittest 라이브러리의 테스트 하위 모듈과의 충돌로 인해 Python 3에서 오류가 발생하여 실패합니다 . 전문가가 응답 하위 디렉토리 이름을 확인하고 'tests'(복수)로 변경할 수 있습니다.
expz

10
test_antigravity.py여전히 import antigravity및에 대한 가져 오기 오류가 발생 from antigravity import antigravity합니다. 두 __init_.py파일 이 모두 python3 -m unittest discover있고 new project디렉토리 에서 전화 하고 있습니다. 다른 무엇이 잘못 될 수 있습니까?
imrek

20
test/__init__.py비어 있더라도 파일 이 중요합니다
Francois

3
@ Mike3d0g 디렉토리 이름 test이 특별 하다는 것을 의미하는지 확실하지 않지만 레코드에 대해서는 그렇지 않습니다. : P python -m unittest discover는 테스트 파일과 tests/마찬가지로 작동합니다 test/.
ryan

49

사용자를위한 가장 간단한 솔루션 runtests.py은 필요한 경우 루트 프로젝트 디렉토리를 sys.path임시로 추가하는 등 필요한 테스트 환경을 부트 스트랩 하는 실행 스크립트 ( 또는 그와 유사한 스크립트)를 제공하는 것 입니다. 이것은 사용자가 환경 변수를 설정할 필요가 없으며 부트 스트랩 스크립트에서 다음과 같이 작동합니다.

import sys, os

sys.path.insert(0, os.path.dirname(__file__))

그러면 사용자에게 " python runtests.py" 처럼 간단하게 지시 할 수 있습니다 .

물론, 실제로 필요한 경로가 인 경우 os.path.dirname(__file__)전혀 추가 할 필요가 없습니다 sys.path. 파이썬은 항상 현재 실행중인 스크립트의 디렉토리를의 시작 부분에 넣습니다. sys.path따라서 디렉토리 구조 runtests.py에 따라 올바른 위치에 위치하는 것이 필요할 수 있습니다.

또한 Python 2.7+unittest 모듈 ( Python 2.6 및 이전 버전의 unittest2 로 백 포트 됨 )에는 테스트 검색 기능이 내장되어 있으므로 자동 테스트 검색을 원할 경우 더 이상 코가 필요하지 않습니다. 사용자 지침은 다음과 같이 간단 할 수 있습니다. python -m unittest discover.


"Major Major"와 같은 하위 폴더에 몇 가지 테스트를 넣었습니다. python -m unittest discover와 함께 실행할 수 있지만 그중 하나만 실행하도록 어떻게 선택할 수 있습니까? python -m unittest tests / testxxxxx를 실행하면 경로 문제로 인해 실패합니다. dicovery 모드는 모든 것을 해결할 수 있기 때문에 당신이 첫 번째 점에 제안 경로 수정을 handcoding없이 경로 문제를 해결하는 또 다른 트릭이 있다는 기대
프레드릭 Bazin

2
@FredericBazin 단일 테스트 또는 테스트 파일 만 원하는 경우 검색을 사용하지 말고 실행하려는 모듈의 이름을 지정하십시오. 파일 경로가 아닌 모듈 점선 경로로 이름을 지정하면 검색 경로를 올바르게 파악할 수 있습니다. 자세한 내용은 Peter의 답변을 참조하십시오.
Carl Meyer

이 핵은 내가 같은 것을 실행 해야하는 시나리오에서 유용했습니다 python -m pdb tests\test_antigravity.py. pdb 내 sys.path.insert(0, "antigravity")에서 모듈을 실행하는 것처럼 import 문을 해결할 수 있도록 실행했습니다.
ixe013

23

필자는 일반적으로 프로젝트 디렉토리 (소스 디렉토리와 공통 디렉토리 test)에 "모든 테스트"제품군을로드 하는 "테스트 실행"스크립트를 작성합니다 . 이것은 일반적으로 상용구 코드이므로 프로젝트마다 재사용 할 수 있습니다.

run_tests.py :

import unittest
import test.all_tests
testSuite = test.all_tests.create_test_suite()
text_runner = unittest.TextTestRunner().run(testSuite)

test / all_tests.py ( 디렉토리에서 모든 Python 단위 테스트어떻게 실행합니까? )

import glob
import unittest

def create_test_suite():
    test_file_strings = glob.glob('test/test_*.py')
    module_strings = ['test.'+str[5:len(str)-3] for str in test_file_strings]
    suites = [unittest.defaultTestLoader.loadTestsFromName(name) \
              for name in module_strings]
    testSuite = unittest.TestSuite(suites)
    return testSuite

이 설정을 사용하면 include antigravity테스트 모듈 에서만 가능 합니다. 단점은 특정 테스트를 실행하기 위해 더 많은 지원 코드가 필요하다는 것입니다 ... 나는 매번 실행합니다.


1
또한 원 프로젝트 디렉토리에있는 스크립트를 발견 많은 청소기 방법 으로 할 수 있습니다. 추천. run tests
z33k

18

링크 한 기사에서 :

test_modulename.py 파일을 만들고 unittest 테스트를 넣으십시오. 테스트 모듈은 코드와 별도의 디렉토리에 있으므로 모듈의 상위 디렉토리를 PYTHONPATH에 추가하여 실행해야 할 수 있습니다.

$ cd /path/to/googlemaps

$ export PYTHONPATH=$PYTHONPATH:/path/to/googlemaps/googlemaps

$ python test/test_googlemaps.py

마지막으로, 파이썬을위한 대중적인 단위 테스팅 프레임 워크가 있습니다. nose는 내장 된 단위 테스트 프레임 워크를 단순화하고 확장하는 데 도움이되지만 (예를 들어 자동으로 테스트 코드를 찾고 PYTHONPATH를 설정할 수 있음) 표준 Python 배포에는 포함되어 있지 않습니다.

아마 당신은 제안한대로 를 봐야 합니까?


3
예, 이것은 (나를 위해) 작동하지만 실제로 테스트를 실행하도록 사용자에게 내 모듈을 제공 할 수있는 가장 간단한 지침을 요구하고 있습니다. 경로를 수정하면 실제로 그럴 수 있지만 더 직접적인 것을 위해 낚시하고 있습니다.
Major Major Major

4
백 개의 프로젝트를 수행 한 후에 파이썬 경로는 어떻게 생겼습니까? 수동으로 들어가서 경로를 정리해야합니까? 그렇다면 이것은 의심스러운 디자인입니다!
jeremyjjbrown 2016 년

11

별도의 단위 테스트 폴더로 동일한 문제가 발생했습니다. 언급 된 제안에서에 절대 소스 경로 를 추가합니다 sys.path.

다음 솔루션의 장점은 test/test_yourmodule.py테스트 디렉토리로 처음 변경하지 않고 파일 을 실행할 수 있다는 것입니다 .

import sys, os
testdir = os.path.dirname(__file__)
srcdir = '../antigravity'
sys.path.insert(0, os.path.abspath(os.path.join(testdir, srcdir)))

import antigravity
import unittest

9

"python setup.py develop"을 실행하면 패키지가 경로에있게됩니다. 그러나 시스템 파이썬 설치를 감염시킬 수 있으므로 virtualenvbuildout 과 같은 도구 가 존재 하기 때문에 그렇게하지 않을 수도 있습니다.


7

Python unittest 모듈 솔루션 / 예

다음과 같은 프로젝트 구조가 주어집니다.

ProjectName
 ├── project_name
 |    ├── models
 |    |    └── thing_1.py
 |    └── __main__.py
 └── test
      ├── models
      |    └── test_thing_1.py
      └── __main__.py

당신과 루트 디렉토리에서 프로젝트를 실행할 수 python project_name있는 호출을 ProjectName/project_name/__main__.py.


python test효과적으로 실행하여 테스트를 실행하려면 ProjectName/test/__main__.py다음을 수행해야합니다.

1) 파일 test/models을 추가 하여 디렉토리를 패키지로 바꾸 십시오 __init__.py. 그러면 하위 디렉토리 내의 테스트 사례가 상위 test디렉토리 에서 액세스 할 수 있습니다 .

# ProjectName/test/models/__init__.py

from .test_thing_1 import Thing1TestCase        

2) 디렉토리 test/__main__.py를 포함하도록 시스템 경로를 수정하십시오 project_name.

# ProjectName/test/__main__.py

import sys
import unittest

sys.path.append('../project_name')

loader = unittest.TestLoader()
testSuite = loader.discover('test')
testRunner = unittest.TextTestRunner(verbosity=2)
testRunner.run(testSuite)

이제 project_name테스트에서 항목을 성공적으로 가져올 수 있습니다 .

# ProjectName/test/models/test_thing_1.py    

import unittest
from project_name.models import Thing1  # this doesn't work without 'sys.path.append' per step 2 above

class Thing1TestCase(unittest.TestCase):

    def test_thing_1_init(self):
        thing_id = 'ABC'
        thing1 = Thing1(thing_id)
        self.assertEqual(thing_id, thing.id)

5

사용 setup.py develop후 테스트를 실행, 작업 디렉토리가 설치 파이썬 환경의 일부가 될 수 있도록합니다.


이것은 나에게 도움이 invalid command 'develop'되며 내가 요청하면이 옵션은 언급되지 않습니다 setup.py --help-commands. setup.py이것이 작동 하려면 그 자체에 무언가가 필요합니까 ?
Major Major Major

괜찮습니다. 문제는 파일 import setuptools에서 setup.py파일 이 누락되었다는 것 입니다. 그러나 이것이 다른 사람들의 모듈에서는 항상 작동하지 않는다는 것을 보여줄 것이라고 생각합니다.
Major Major Major

1
pip 가있는 경우 이를 사용하여 "편집 가능"모드로 패키지를 설치할 수 있습니다 . pip install -e .마찬가지로 소스를 복사하지 않고 Python 환경에 패키지를 추가하여 현재 위치에서 계속 편집 할 수 있습니다.
Eric Smith

pip install -e .와 정확히 같은 것입니다. 실제로 그렇지 않더라도 setuptools를 사용하도록 python setup.py develop원숭이 패치합니다 setup.py.
Carl Meyer

5

VS 코드를 사용하고 테스트가 프로젝트와 동일한 수준에있는 경우 코드 실행 및 디버그가 즉시 작동하지 않습니다. 수행 할 수있는 것은 launch.json 파일을 변경하는 것입니다.

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python",
            "type": "python",
            "request": "launch",
            "stopOnEntry": false,
            "pythonPath": "${config:python.pythonPath}",
            "program": "${file}",
            "cwd": "${workspaceRoot}",
            "env": {},
            "envFile": "${workspaceRoot}/.env",
            "debugOptions": [
                "WaitOnAbnormalExit",
                "WaitOnNormalExit",
                "RedirectOutput"
            ]
        }    
    ]
}

여기서 핵심은 envFile입니다.

"envFile": "${workspaceRoot}/.env",

프로젝트의 루트에 .env 파일을 추가하십시오.

.env 파일 내부에 프로젝트 루트의 경로를 추가하십시오. 일시적으로 추가됩니다

PYTHONPATH = C : \ YOUR \ PYTHON \ PROJECT \ ROOT_DIRECTORY

프로젝트 경로를 지정하면 VS 코드에서 디버그 단위 테스트를 사용할 수 있습니다


5

"src"디렉토리에서 unittest 명령 행 인터페이스를 실행하면 가져 오기가 수정없이 올바르게 작동합니다.

python -m unittest discover -s ../test

프로젝트 디렉토리의 배치 파일에 배치하려면 다음을 수행하십시오.

setlocal & cd src & python -m unittest discover -s ../test

5

나는 오랫동안 같은 문제를 겪었다. 최근에 선택한 것은 다음 디렉토리 구조입니다.

project_path
├── Makefile
├── src
   ├── script_1.py
   ├── script_2.py
   └── script_3.py
└── tests
    ├── __init__.py
    ├── test_script_1.py
    ├── test_script_2.py
    └── test_script_3.py

__init__.py테스트 폴더 의 스크립트에서 다음을 작성합니다.

import os
import sys
PROJECT_PATH = os.getcwd()
SOURCE_PATH = os.path.join(
    PROJECT_PATH,"src"
)
sys.path.append(SOURCE_PATH)

프로젝트를 공유하는 데 가장 중요한 것은 Makefile입니다. 스크립트를 올바르게 실행해야하기 때문입니다. Makefile에 넣은 명령은 다음과 같습니다.

run_tests:
    python -m unittest discover .

Makefile은 실행되는 명령뿐만 아니라 실행 위치 때문에 중요 합니다 . 테스트에서 cd를 수행하면 unit_tests python -m unittest discover .init 스크립트가 os.getcwd ()를 호출하여 잘못된 절대 경로 (sys.path에 추가되고 누락 될 수 있음)를 가리 키므로 작동하지 않습니다. 소스 폴더). discover는 모든 테스트를 찾은 이후 스크립트가 실행되지만 제대로 실행되지 않습니다. 따라서 Makefile은이 문제를 기억하지 않아도됩니다.

내 src 폴더, 단위 테스트 또는 환경 변수를 만질 필요가 없으며 모든 것이 원활하게 실행 되므로이 방법이 정말 좋습니다.

당신이 그것을 좋아하면 알려주십시오.

도움이 되길 바랍니다.


4

다음은 내 프로젝트 구조입니다.

ProjectFolder:
 - project:
     - __init__.py
     - item.py
 - tests:
     - test_item.py

setUp () 메소드에서 가져 오는 것이 더 좋습니다.

import unittest
import sys    

class ItemTest(unittest.TestCase):

    def setUp(self):
        sys.path.insert(0, "../project")
        from project import item
        # further setup using this import

    def test_item_props(self):
        # do my assertions

if __name__ == "__main__":
    unittest.main()

4

실제로 테스트를 실행하는 일반적인 방법은 무엇입니까

파이썬 3.6.2를 사용합니다

cd new_project

pytest test/test_antigravity.py

설치하려면 pytest를 :sudo pip install pytest

경로 변수를 설정하지 않았으며 동일한 "테스트"프로젝트 구조로 가져 오기가 실패하지 않습니다.

나는 이것을 다음 if __name__ == '__main__'과 같이 주석 처리했다 .

test_antigravity.py

import antigravity

class TestAntigravity(unittest.TestCase):

    def test_something(self):

        # ... test stuff here


# if __name__ == '__main__':
# 
#     if __package__ is None:
# 
#         import something
#         sys.path.append(path.dirname(path.dirname(path.abspath(__file__))))
#         from .. import antigravity
# 
#     else:
# 
#         from .. import antigravity
# 
#     unittest.main()

4

선택된 또는 모든 테스트를 실행하는 래퍼를 사용할 수 있습니다.

예를 들어 :

./run_tests antigravity/*.py

또는 모든 테스트를 재귀 적으로 실행하려면 globbing ( tests/**/*.py)을 사용하십시오 (로 활성화 shopt -s globstar).

래퍼는 기본적으로 argparse다음과 같은 인수를 구문 분석하는 데 사용할 수 있습니다 .

parser = argparse.ArgumentParser()
parser.add_argument('files', nargs='*')

그런 다음 모든 테스트를로드하십시오.

for filename in args.files:
    exec(open(filename).read())

그런 다음을 사용하여 테스트 스위트에 추가하십시오 inspect.

alltests = unittest.TestSuite()
for name, obj in inspect.getmembers(sys.modules[__name__]):
    if inspect.isclass(obj) and name.startswith("FooTest"):
        alltests.addTest(unittest.makeSuite(obj))

그들을 실행하십시오 :

result = unittest.TextTestRunner(verbosity=2).run(alltests)

자세한 내용은 예를 확인 하십시오.

디렉토리에서 모든 Python 단위 테스트를 실행하는 방법 도 참조하십시오 .


4

파이썬 3+

@Pierre에 추가

다음 unittest과 같은 디렉토리 구조를 사용 하십시오.

new_project
├── antigravity
   ├── __init__.py         # make it a package
   └── antigravity.py
└── test
    ├── __init__.py         # also make test a package
    └── test_antigravity.py

테스트 모듈을 실행하려면 test_antigravity.py:

$ cd new_project
$ python -m unittest test.test_antigravity

아니면 하나 TestCase

$ python -m unittest test.test_antigravity.GravityTestCase

__init__.py비어있는 경우에도 필수 사항을 잊지 마십시오 . 그렇지 않으면 작동하지 않습니다.


2

부두가 없으면 부모 디렉토리에서 가져올 수 없습니다. 최소한 Python 3.6에서 작동하는 또 다른 방법이 있습니다.

먼저 다음 내용을 가진 test / context.py 파일을 만드십시오.

import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

그런 다음 test / test_antigravity.py 파일에서 다음 가져 오기를 수행하십시오.

import unittest
try:
    import context
except ModuleNotFoundError:
    import test.context    
import antigravity

이 try-except 절의 이유는 다음과 같습니다.

  • "python test_antigravity.py"로 실행하면 import test.context 가 실패하고
  • new_project 디렉토리에서 "python -m unittest"로 실행하면 가져 오기 컨텍스트 가 실패합니다.

이 속임수로 그들은 둘 다 작동합니다.

이제 다음을 사용 하여 테스트 디렉토리 내의 모든 테스트 파일을 실행할 수 있습니다 .

$ pwd
/projects/new_project
$ python -m unittest

또는 다음을 사용하여 개별 테스트 파일을 실행하십시오.

$ cd test
$ python test_antigravity

좋아, 그것은 test_antigravity.py 내에 context.py의 내용을 갖는 것보다 훨씬 더 아름답지는 않지만 약간 일 수 있습니다. 제안은 환영합니다.


2

테스트 디렉토리에 여러 디렉토리가있는 경우 각 디렉토리에 __init__.py파일 을 추가해야 합니다.

/home/johndoe/snakeoil
└── test
    ├── __init__.py        
    └── frontend
        └── __init__.py
        └── test_foo.py
    └── backend
        └── __init__.py
        └── test_bar.py

그런 다음 모든 테스트를 한 번에 실행하려면 다음을 실행하십시오.

python -m unittest discover -s /home/johndoe/snakeoil/test -t /home/johndoe/snakeoil

출처: python -m unittest -h

  -s START, --start-directory START
                        Directory to start discovery ('.' default)
  -t TOP, --top-level-directory TOP
                        Top level directory of project (defaults to start
                        directory)

1

이 BASH 스크립트는 작업 디렉토리에 관계없이 파일 시스템의 어느 곳에서나 파이썬 unittest 테스트 디렉토리를 실행합니다.

이것은 ./src또는 ./example작업 디렉토리에 머무를 때 유용 하며 빠른 단위 테스트가 필요합니다.

#!/bin/bash

this_program="$0"
dirname="`dirname $this_program`"
readlink="`readlink -e $dirname`"

python -m unittest discover -s "$readlink"/test -v

test/__init__.py파일을 제작할 때 패키지 / 메모리 오버 헤드에 부담을 줄 필요가 없습니다 .


1

이 방법을 사용하면 명령 줄에서 시스템 변수를 사용하지 않고도 원하는 곳에서 테스트 스크립트를 실행할 수 있습니다.

이렇게하면 메인 프로젝트 폴더가 파이썬 경로에 추가되며, 현재 작업 디렉토리가 아닌 스크립트 자체에 상대적으로 위치가 있습니다.

import sys, os

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__))))

모든 테스트 스크립트 상단에 추가하십시오. 그러면 기본 프로젝트 폴더가 시스템 경로에 추가되므로 여기에서 작동하는 모든 모듈 가져 오기가 작동합니다. 어디에서 테스트를 실행하든 문제가되지 않습니다.

기본 프로젝트 폴더 위치와 일치하도록 project_path_hack 파일을 분명히 변경할 수 있습니다.


0

명령 행 전용 솔루션을 찾고있는 경우 :

다음 디렉토리 구조 (전용 소스 디렉토리로 일반화)를 기반으로합니다.

new_project/
    src/
        antigravity.py
    test/
        test_antigravity.py

Windows : (에서 new_project)

$ set PYTHONPATH=%PYTHONPATH%;%cd%\src
$ python -m unittest discover -s test

배치 for 루프에서 이것을 사용하려면 이 질문을 참조하십시오 .

리눅스 : (에서 new_project)

$ export PYTHONPATH=$PYTHONPATH:$(pwd)/src  [I think - please edit this answer if you are a Linux user and you know this]
$ python -m unittest discover -s test

이 방법을 사용하면 필요한 경우 PYTHONPATH에 더 많은 디렉토리를 추가 할 수도 있습니다.


0

실제로 pip 도구를 사용해야합니다.

pip install -e .개발 모드에서 패키지를 설치하는 데 사용하십시오 . 이것은 pytest에서 권장하는 매우 좋은 방법입니다 (따라서 두 가지 프로젝트 레이아웃을 찾을 수있는 좋은 방법 문서 참조 ).


왜이 답변을 공감해야합니까? 나는 받아 들인 대답을 읽었으며 나쁘지 않은 동안 pytest스택 추적 정보와 자세한 어설 션 오류 정보로 콘솔 출력으로 인해 테스트를 실행하는 것이 좋습니다.
aliopi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.