파이썬 테스트시 모듈을 찾지 못하는 에러가 잦았다. 그중 내가 시도해서 되었던 방법 위주로 정리해보았다.
__init__.py 추가test 폴더 아래 __init__.py 를 추가한다. 다만 루트 디렉터리에 넣을 경우 다시 모듈을 찾지 못할 수도 있다.
출처: https://stackoverflow.com/a/18971504,
https://stackoverflow.com/a/77671533
if __name__ == '__main__':
unittest.main()
주로 테스트 파일 가장 하단에 이 코드를 추가한다.
출처: https://stackoverflow.com/a/55036056
# linux:
PYTHONPATH=/프로젝트/경로
# windows:
set PYTHONPATH=\프로젝트\경로
cmd에서 테스트하기 전에 PYTHONPATH를 잡아준다.
출처: https://stackoverflow.com/a/4580120
python -m pytest tests/
pytest로 이렇게 지정할 경우 PYTHONPATH에 자동으로 현재 디렉터리를 추가한다. 3번 방법은 강제로 지정하는 방법이라 이 방법이 더 나아보인다.
출처: https://stackoverflow.com/a/34140498
여기까지 하면 cmd에서 test 돌리는 것은 문제가 없었다. 하지만 IDE에서 test를 실행하면 여전히 프로젝트 구조를 못 잡고 failed to import 에러가 발생했다. 그럴 경우 아래 방법을 사용했다.
.env 만들기PYTHONPATH=\프로젝트\경로
루트에 .env 파일을 만들어서 프로젝트 경로를 지정한다.
출처: https://stackoverflow.com/a/76761237
launch.json에도 지정 "env": {
"PYTHONPATH": "\프로젝트\경로"
}
VS Code를 사용할 경우 launch.json에도 추가한다. VS Code에서 Testing 탭을 클릭하고 셋팅하면 luanch.json 파일이 자동으로 생성되고, 여기에 env를 추가해주면 된다.
출처: https://stackoverflow.com/a/76768366
src의 구조와 test의 구조를 동일하게 가져가지 않도록 권장한다.
Intellij IDEA에서는 잘 되었는데 VS Code에서 에러가 발생했을 때 이 방법으로 해결했다. test 아래 폴더명을 src 폴더 아래와 다르게 변경한 이후 잘 동작했다.